在Rails ActiveRecord中如何指定要在has_many创建的连接中选择的列

时间:2015-01-10 03:12:09

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

我正在使用Rails代码,该代码根据has_many关系返回左外连接:

@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 

这将创建一个Left Outer Join,它选择父表(MyModel)中的所有列和子表(foos)中的所有列。

如何选择子连接中为此连接选择的列?我可以列出要选择的列,或者要忽略的列,只要结果查询不包含具有大量数据的特别大的列。在这种情况下,在连接后过滤它不是一个选项。

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

我试过了:

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

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

1 个答案:

答案 0 :(得分:0)

您可以这样做:

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