[英]Add CROSS JOIN to Arel
我喜欢将CROSS JOIN添加到我的RoR应用程序中。 使用Arel时,可以这样添加联接:
cars.joins(Car.arel_table.join(Part.arel_table, Arel::Nodes::OuterJoin).on(Car.arel_table[:id].eq(Part.arel_table[:car_id]))
在我的情况下,我需要一个CROSS JOIN,但是在Arel中不可用。如何将CROSS JOIN添加到Arel?
我找到了OuterJoin类,并使用以下代码添加了一个新文件:
module Arel module Nodes class CrossJoin < Arel::Nodes::Join end end end
但这似乎还不足以使其起作用。 我收到一个TypeError:无法访问Arel :: Nodes :: CrossJoin
浏览Arel来源后,我自己弄清楚了。 我需要向Arel添加一个Visitor方法以使其工作,我复制了visit_Arel_Nodes_InnerJoin方法并将其重命名。
module Arel
module Nodes
class CrossJoin < Arel::Nodes::Join
end
end
module Visitors
class ToSql
def visit_Arel_Nodes_CrossJoin o, collector
collector << "CROSS JOIN "
collector = visit o.left, collector
if o.right
collector << SPACE
visit(o.right, collector)
else
collector
end
end
end
end
结束
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.