Rails选择所有孩子的孩子

时间:2015-07-31 09:44:53

标签: ruby-on-rails activerecord children

我的班级S有很多A班,有很多B.

我可以为我的S(S.As)获得所有的A&#39 我可以迭代这个数组并为每个A获得Bs。

类似

S.As.each do |aa| 
    aa.Bs
end 

如果不使用'每个'?

,我该怎么做?

2 个答案:

答案 0 :(得分:5)

这将在没有each

的一行中生效
S.As.collect(&:Bs)

答案 1 :(得分:3)

如果问题出在N + 1个查询中,我建议使用includes

现在为每个As生成一个新查询以获取它的Bs。

如果你这样写:

S.As.includes(:Bs).each do |aa| 
    aa.Bs
end 

您将获得更少的查询,因为所有B都将被预加载。

在这种情况下,

map and collect不会改变任何内容。