0

我正在创建一项存储食品食谱的服务,并且我正在尝试创建一个成分列表,其中包含每种成分的可选首选品牌。因此,例如,我可能会说意大利面食谱使用去皮的西红柿,而首选品牌是 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 和 ingredients_id 都指向同一个模型,并且 :preferred_ingredients 实际上并不作为符号存在。我需要以不同的方式设置我的关联吗?

4

2 回答 2

1

假设您将成分参考存储在 RecipeIngredient 中,

belongs_to :preferred_ingredient, class_name: 'Ingredient'

我还认为您引用了 RecipeIngredient 中的成分,因此您也想将其更改has_onebelongs_to那里。(如果配方被删除,成分被破坏是否有意义?)

但是考虑到您实际上可能对特定成分有很多选择,您可能正在寻找更像这样的东西:

配方成分:

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

成分选项

belongs_to :recipe_ingredient
belongs_to :ingredient
于 2013-02-27T02:51:11.837 回答
0

你也可以看看@ self-referential-association

这也可能对你有帮助 Rails Associations - has_many => :through - 但相同的模型

于 2013-02-27T16:08:01.277 回答