连接变量和字符串与 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一起工作?

似乎

Arel::Nodes::SqlLiteral可以完成这项工作:

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

相关内容

  • 没有找到相关文章

最新更新