我尝试使用 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一起工作?
似乎
Arel::Nodes::SqlLiteral
可以完成这项工作:
node = Node.arel_table
job = Job.arel_table
lit = Arel::Nodes::SqlLiteral.new("_______%")
node.join(job).on(node[:id].matches(lit))