【问题标题】:Rails - using group_by and has_many :through and trying to access join table attributesRails - 使用 group_by 和 has_many :through 并尝试访问连接表属性
【发布时间】:2011-08-26 03:49:49
【问题描述】:

有关一些背景,请参阅我的问题: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? (如果我这样做,它会为我提供所有食谱的 rec_items ......再次,我可以用笨拙的语句来做到这一点,例如:

ingredient.rec_items.find_by_recipe_id(@recipe.id).amount

但这似乎是错误的......)有没有一种简单的方法来实现这些目标? (获取特定配方成分的列表,按 :type 排序/分组,同时仍然能够访问 rec_items 中每个配方/成分配对的附加信息?)

谢谢!

【问题讨论】:

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


    【解决方案1】:

    再次发布相同的答案,稍作修改:

    您可以在此处使用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
    

    【讨论】:

    • 完美运行。感谢(继续)帮助 - 不知道为什么我在从你的第一个答案中提取这个问题时遇到了这么多麻烦 - Rails 和 Ruby 给了我比其他语言更陡峭的学习曲线......
    猜你喜欢
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2011-06-07
    相关资源
    最近更新 更多