Rails - 使用group_by和has_many:通过并尝试访问连接表属性

时间:2011-08-25 19:14:33

标签: ruby-on-rails ruby-on-rails-3 has-many-through

对于某些背景,请参阅我的问题: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中访问每个配方/配料配对中的其他信息?)

谢谢!

1 个答案:

答案 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
相关问题