在连接时将变量与字符串连接起来

时间:2016-03-11 15:01:39

标签: sql ruby arel

我尝试使用Arel连接两个表来生成这样的SQL:

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

匹配以节点 ID之一开头的任何作业。当我运行普通SQL时,这是有效的,现在我尝试用Arel构建它:

node = Node.arel_table
job = Job.arel_table

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

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

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

完整的字符串将被转义。有没有办法将原始SQL传递给不会被转义的Arel matches方法或任何其他方式来使用Arel?

1 个答案:

答案 0 :(得分:3)

似乎Arel::Nodes::SqlLiteral完成了这项工作:

node = Node.arel_table
job = Job.arel_table

lit = Arel::Nodes::SqlLiteral.new("_______%") 

node.join(job).on(node[:id].matches(lit))