我有以下模特
:order has_many :dishes
:dish has_and_belongs_to_many :items
我有一个@orders的集合,我如何计算:item?
e.g。我有3种食物,鸡肉,牛肉和猪肉。还有两道菜,首先是鸡肉和牛肉,第二道是鸡肉,牛肉和猪肉。两个订单,第一个订单包含菜#1,第二个订单包含两个菜。我想知道有3个牛肉,3个鸡肉和1个猪肉。
如何在rails中实现这一目标?
答案 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