2013-02-27 81 views
0

我正在創建一個服務來存儲食物食譜,並且我正在嘗試爲每種成分創建一個可選的首選品牌成分列表。舉例來說,我可能會說意大利麪配方使用去皮番茄,首選品牌是Cento。我的成分被存儲在一個分層的分類樹中,所以首選的成分是該樹中成分的一個孩子。Rails協會難題

這是我簡單的數據庫設置:

recipes 
- name 
- instructions 

ingredients 
- name 

recipe_ingredients 
- recipe_id 
- ingredient_id 
- preferred_ingredient_id 
- amount 

而且協會:

class Recipe < ActiveRecord::Base 
    has_many :recipe_ingredients 
    has_many :ingredients, :through => :recipe_ingredients 
    has_many :preferred_ingredients, :through => :recipe_ingredients 
end 

class Ingredient < ActiveRecord::Base 
end 

class RecipeIngredient < ActiveRecord::Base 
    belongs_to :recipe 
    has_one :ingredient 
    has_one :preferred_ingredient 
end 

我不知道如何處理preferred_ingredient_id和ingredient_id都指向同一個模型,並指出:preferred_ingredients實際上並不是一個象徵。我需要以不同的方式設置我的關聯嗎?

回答

1

假設你存儲RecipeIngredient成分參考,

belongs_to :preferred_ingredient, class_name: 'Ingredient' 

我還以爲你在引用中RecipeIngredient的成分,所以你想改變has_onebelongs_to有作爲。 (難道是有意義,如果配方被刪除的成份被破壞?)

但考慮到你實際上可能有一個特定的成分很多選擇,你可能會尋找更多的東西是這樣的:

RecipeIngredient :

belongs_to :recipe 
belongs_to :preferred_ingredient, class_name: 'Ingredient' 
has_many :ingredient_options 
has_many :ingredients, through: :ingredient_options 

IngredientOption

belongs_to :recipe_ingredient 
belongs_to :ingredient 
+0

'model_name'是belongs_to的關聯 'belongs_to的未知鍵:preferred_ingredient,CLASS_NAME:「Ingredient'' 它應該是代替 – swapab 2013-02-27 07:58:28

+0

@ swap.nil感謝指點那個。固定。 – bdares 2013-02-27 09:56:22

+0

這很有道理。謝謝您的幫助! – 2013-02-27 15:33:29