2014-07-11 53 views
1

我有兩個型號選擇一個家長和一個孩子了額外查詢

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belogs_to :parent 
end 

我要選擇從每一個家長一個孩子與任何額外查詢我需要什麼做 我可以通過這些線

Parent.all.collect{|p| p.children.first} 

做到這一點,但是這是一個方法非常差d會運行多個查詢我需要一個最好的方式這將返回活動記錄列表。

回答

1

Eager Loading Associations節。如果你想獲得活動記錄對象然後使從對方UND使用SQL GROUP_BY您的來電:

Child.joins(:parent).group(:parent_id) 
+0

是的,這是正確的謝謝 –

1

我覺得你的問題可以用一個簡單的includes

Parent.includes(:children).map{|parent| parent.children.first } 

要解決這樣你將執行兩個查詢整個循環。

+0

喜xlembouras這將加載所有的孩子從所有我想要的只是一個E中的父非常的父母和只有一個孩子從數據庫加載。 –

+0

這會返回一個數組我想要活動記錄對象 –

2

以下是做同樣的事情,最好的方法,它會運行查詢只是兩次:

Parent.includes(:children).collect { |p| p.children.first } 

有關詳細信息,請參閱從Rails Guide.

+0

這會返回一個數組我想要活動記錄對象。 –

相關問題