【问题标题】:Concatenate variable and string with Arel on join在连接时将变量和字符串与 Arel 连接起来
【发布时间】:2016-06-26 21:19:17
【问题描述】:

我尝试使用Arel 连接两个表以生成如下 SQL:

[...]
INNER JOIN "nodes" ON "nodes"."id" LIKE "jobs"."ancestry" || '%'
[...]

匹配以 node ID 之一开头的任何 job。当我运行简单的 SQL 时,这可行,现在我尝试使用 Arel 构建它:

node = Node.arel_table
job = Job.arel_table

node.join(job).on(node[:id].matches("_______%"))

现在我找不到任何如何为matches 获取正确字符串的方法,即使我尝试:

"\"nodes\".\"ancesty\" || %"

整个字符串将被转义。有什么方法可以将原始 SQL 传递给不会被转义的 Arel matches 方法或任何其他方法来使其与 Arel 一起工作?

【问题讨论】:

    标签: sql ruby arel


    【解决方案1】:

    看来Arel::Nodes::SqlLiteral 能胜任:

    node = Node.arel_table
    job = Job.arel_table
    
    lit = Arel::Nodes::SqlLiteral.new("_______%") 
    
    node.join(job).on(node[:id].matches(lit))
    

    【讨论】:

    • 要连接字符串,您还可以使用 SqlLiteral 对象的 <<+ 方法。但是对于表格数据,您可能需要类似stackoverflow.com/a/12514997/1547831 中的内容
    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 2011-05-13
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多