我有以下型号
:order has_many :dishes
:dish has_and_belongs_to_many :items
我有一个集合@orders,我如何计算:item?
例如,我有 3 个项目,鸡肉、牛肉和猪肉。还有两道菜,第一个有鸡肉和牛肉,第二个有鸡肉,牛肉和猪肉。两个订单,第一个订单包含菜 #1,第二个订单包含两个菜。我想知道牛肉有 3 个,鸡肉有 3 个,猪肉有 1 个。
我怎样才能在rails中实现这一点?
我有以下型号
:order has_many :dishes
:dish has_and_belongs_to_many :items
我有一个集合@orders,我如何计算:item?
例如,我有 3 个项目,鸡肉、牛肉和猪肉。还有两道菜,第一个有鸡肉和牛肉,第二个有鸡肉,牛肉和猪肉。两个订单,第一个订单包含菜 #1,第二个订单包含两个菜。我想知道牛肉有 3 个,鸡肉有 3 个,猪肉有 1 个。
我怎样才能在rails中实现这一点?
有趣的问题,我不知道有什么特别好的方法可以做到这一点,希望有人会发布一个,但与此同时,您可以通过遍历独特元素并计算出现次数来找到计数:
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
这不行吗?
@beef_orders = @orders.dishes.items.where(:ingredients => "beef").count