我有两个型号
class Parent < ActiveRecord::Base
has_many :children
end
和
class Child < ActiveRecord::Base
belogs_to :parent
end
我想从每个家长中选择一个孩子,不需要任何额外的查询我需要做什么 我可以通过这些线
来做到这一点Parent.all.collect{|p| p.children.first}
但这是一种非常差的方法,并且会运行多个查询我需要一个最好的方法,它将返回活动记录列表。
答案 0 :(得分:2)
以下是执行相同操作的最佳方法,它只会运行两次查询:
Parent.includes(:children).collect { |p| p.children.first }
有关详细信息,请参阅Rails Guide.
中的Eager Loading Associations
部分
答案 1 :(得分:1)
我认为您的问题可以通过简单的includes
来解决Parent.includes(:children).map{|parent| parent.children.first }
这样你就可以对整个循环执行两次查询。
答案 2 :(得分:1)
如果您想获取活动记录对象,请从另一方拨打电话并使用SQL GROUP_BY:
Child.joins(:parent).group(:parent_id)