1

我有以下型号

:order has_many :dishes
:dish has_and_belongs_to_many :items

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

例如,我有 3 个项目,鸡肉、牛肉和猪肉。还有两道菜,第一个有鸡肉和牛肉,第二个有鸡肉,牛肉和猪肉。两个订单,第一个订单包含菜 #1,第二个订单包含两个菜。我想知道牛肉有 3 个,鸡肉有 3 个,猪肉有 1 个。

我怎样才能在rails中实现这一点?

4

2 回答 2

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
于 2013-07-17T07:01:53.647 回答
-1

这不行吗?

@beef_orders = @orders.dishes.items.where(:ingredients => "beef").count
于 2013-07-17T05:18:39.953 回答