Rails模型的食谱和子食谱协会

时间:2012-08-17 01:13:44

标签: ruby-on-rails model associations

我如何制作一个具有以下关联的项目表:

我的最终目标是能够创建具有许多组件和子配方的配方(我希望将其合并为一个下拉菜单)

Component

  belongs_to sub_recipe

End

Sub_recipe

  has_many components

  belongs_to recipe

End

Recipe 

  has_many subrecipes

  has_many components

End

1 个答案:

答案 0 :(得分:1)

您希望每个项目都有一个表格,并且需要一个关联表格

#class RawComponent < ActiveRecord::Base
#  has_and_belongs_to_many :recipes
#end

class Recipe < ActiveRecord::Base
  has_many :recipe_components
  has_many :subrecipes, :through => :recipe_components
  has_many :recipes, :through => :recipe_components
#  has_and_belongs_to_many :raw_components
end

class RecipeComponents < ActiveRecord::Base
  belongs_to :recipe
  belongs_to :subrecipe, :class_name => :Recipe
end

假设你有一个@recipe,你可以去:

@recipe.subrecipes # find all subrecipes required to make this recipe
@recipe.recipes # find all recipes using this as a subrecipe

还添加了可能的RawComponent类,您可以将其用于不由其他组件组成的内容。但是你不需要它,如果你在没有任何子配方的情况下使每个RawComponent成为一个配方,这也是建模情况的有效方法。

关键点是关联模型(RecipeComponents)属于:在层次结构中较高的配方,以及:子配方,它在层次结构中较低,但与配方具有相同的类类型。