对于某些背景,请参阅我的问题:Rails app using STI -- easiest way to pull these records?
我有一些模型使用第三个连接表(通过RecItem连接的配方和成分)与has_many关系连接。
所以前面问题的人帮我按类型分组我的食谱成分 - 这正是我想要的。但是,现在我正在访问@ recipe.ingredients而不是@ recipe.rec_items,我无法回到存储在rec_items连接表中的数据(例如成分的数量,烹饪时间等等... )
在使用group_by之前,我正在迭代每个食谱的rec_items,如下所示:
<% @recipe.rec_items.each do |rec_item| %>
<%= rec_item.ingredient.name %><br />
<%= rec_item.amount %><br />
<% end -%>
现在我正在对@ recipe.ingredients进行分组,如何回溯与此配方相关的rec_items? (如果我做了ingredient.rec_items它给了我rec_items的所有食谱......再次,我可以用笨重的陈述来做到这一点,如:
ingredient.rec_items.find_by_recipe_id(@recipe.id).amount
但这似乎是错误的......)是否有一种简单的方法来实现这些目标? (获取特定配方的成分列表,按照:类型排序/分组,同时仍然能够在rec_items中访问每个配方/配料配对中的其他信息?)
谢谢!
答案 0 :(得分:4)
再次发布相同的答案,稍作修改:
您可以在此处使用group_by
。顺便说一句,你最好在查询配方中使用includes
,否则会有很多查询。
recipe.rec_items.group_by {|ri| ri.ingredient.type}.each do |type, rec_items|
puts type
rec_items.each do |rec_item|
puts rec_item.inspect
puts rec_item.ingredient.inspect
end
end