【问题标题】:in Rails ActiveRecord how do you specify the columns to select in a join created by has_many在 Rails ActiveRecord 中,如何指定在 has_many 创建的连接中选择的列
【发布时间】:2015-01-10 03:12:08
【问题描述】:

我正在使用基于 has_many 关系返回左外连接的 Rails 代码:

@results = MyModel.where(:model_id => 123).includes(:foos).all

MyModel 有这种关系:

 has_many   :foos, :as => :fooed, :conditions => 'foo_number IS NOT NULL', :order => "foo_number asc", :dependent => :destroy 

这将创建一个左外连接,它选择父表 (MyModel) 中的所有列和子表 (foos) 中的所有列。

如何选择在子表中为此联接选择哪些列?我可以列出要选择的列或要忽略的列,只要结果查询不包含包含大量数据的特别大的列。在这种情况下,不能在加入后将其过滤掉。

理想情况下,我希望结果仍然是左外连接,而不是执行许多 SQL 查询。

我尝试过:

@results = MyModel.where(:model_id => 123).includes(:foos).select("childcol1, childcol2").all

但这根本不会改变生成的查询。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rails-activerecord


    【解决方案1】:

    你可以这样做:

    @results = MyModel.select('my.model.*, foos.childcol1, foos.childcol2').
                       where(:model_id => 123).
                       includes(:foos).
                       references(:foos)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多