【问题标题】:Add CROSS JOIN to Arel将 CROSS JOIN 添加到 Arel
【发布时间】:2018-09-12 13:53:39
【问题描述】:

我喜欢将 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 中不可用。如何向 Arel 添加 CROSS JOIN?

我找到了 OuterJoin 类,并使用以下代码添加了一个新文件:

module Arel module Nodes class CrossJoin < Arel::Nodes::Join end end end

但这似乎还不足以让它发挥作用。我收到一个 TypeError:无法访问 Arel::Nodes::CrossJoin

【问题讨论】:

    标签: ruby-on-rails activerecord arel


    【解决方案1】:

    在浏览了 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
    

    结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2013-07-19
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多