繁体   English   中英

将CROSS JOIN添加到Arel

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM