我正在创建一个存储食谱的服务,我正在尝试为每种成分创建一个包含可选首选品牌的成分列表。因此,例如,我可能会说面食配方使用去皮西红柿,首选品牌是Cento。我的成分存储在分层类别树中,因此首选成分是该树中成分的子成分。
这是我的简化数据库设置:
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实际上并不作为符号存在。我需要以不同的方式建立我的协会吗?
答案 0 :(得分:1)
假设您将成分参考存储在RecipeIngredient中,
belongs_to :preferred_ingredient, class_name: 'Ingredient'
我也认为你引用了RecipeIngredient中的成分,所以你也希望将has_one
更改为belongs_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
答案 1 :(得分:0)