2013-07-17 54 views
1

數我有以下型號怎麼算協會

:order has_many :dishes 
:dish has_and_belongs_to_many :items 

我有一個集合@orders,我怎麼算的:項目嗎?

例如我有3個項目,雞肉,牛肉和豬肉。兩道菜,首先是雞肉和牛肉,其次是雞肉,牛肉和豬肉。兩個訂單,第一個訂單包含菜#1,第二個訂單包含兩個菜。我想知道有3個牛肉,3個雞肉和1個豬肉。

如何在rails中實現這一目標?

+0

目前我正在做的是將所有關聯的項目合併到一個數組中,然後查找每個唯一項目的發生。尋找更好的方法。 – user1495133

回答

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 
+0

謝謝,這是我最終做的。首先收集所有元素,然後找出唯一項目的數量。 – user1495133

-1

這不工作?

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

感謝您的回覆。但問題是,有很多項目,不僅僅是3.我想要的東西像{「牛肉」=> 3,「雞肉」=> 3,「豬肉」=> 1,...}。目前我正在做的是將所有關聯的項目合併到一個數組中,然後查找每個唯一項目的發生。尋找更好的方法。 – user1495133