2016-03-11 32 views
1

我尝试加入使用Arel生成一些SQL这样的两个表:串联变量和字符串阿雷尔上加入

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

匹配任何工作,与节点 ID的一个开始。当我运行普通的SQL这个作品,现在我尝试用阿雷尔建立这样的:

node = Node.arel_table 
job = Job.arel_table 

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

现在,我找不到任何如何得到正确的字符串matches,即使我尝试:

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

完整的字符串将被转义。有没有办法通过原始SQL的Arel matches方法,将不会逃脱或任何其他方式与Arel合作?

回答

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)) 
+0

连接字符串,你也可以使用'<<'和'+'的SqlLiteral对象的方法。但对于使用表数据,你可能需要在http://stackoverflow.com/a/12514997/1547831 – TNT