如何计算关联数量

时间:2013-07-17 05:03:46

标签: ruby-on-rails

我有以下模特

:order has_many :dishes
:dish has_and_belongs_to_many :items

我有一个@orders的集合,我如何计算:item?

e.g。我有3种食物,鸡肉,牛肉和猪肉。还有两道菜,首先是鸡肉和牛肉,第二道是鸡肉,牛肉和猪肉。两个订单,第一个订单包含菜#1,第二个订单包含两个菜。我想知道有3个牛肉,3个鸡肉和1个猪肉。

如何在rails中实现这一目标?

2 个答案:

答案 0 :(得分:0)

有趣的问题,我不知道有什么特别好的方法可以做到这一点,希望有人会发布一个,但在此期间你可以通过迭代独特的元素并计算出现次数来找到计数:

items = <gather all the items into one array>
items.uniq.each do |item|
  puts item.name
  puts items.count(item)
end

要将所有子项目收集到一个数组中,最好是您有一个:has_many through关系,这样您就可以直接获取订单项目,跳过菜肴:

class Order < ActiveRecord::Base
  has_many :dishes
  has_many :items, through => :dishes
end

items = @orders.map(&:items).flatten

答案 1 :(得分:-1)

这不会起作用吗?

@beef_orders = @orders.dishes.items.where(:ingredients => "beef").count