我尝试使用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?
答案 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))