我将如何制作具有以下关联的项目表:
我的最终目标是能够创建具有许多组件和子食谱的食谱(我想将它们组合成一个下拉菜单)
Component
belongs_to sub_recipe
End
Sub_recipe
has_many components
belongs_to recipe
End
Recipe
has_many subrecipes
has_many components
End
我将如何制作具有以下关联的项目表:
我的最终目标是能够创建具有许多组件和子食谱的食谱(我想将它们组合成一个下拉菜单)
Component
belongs_to sub_recipe
End
Sub_recipe
has_many components
belongs_to recipe
End
Recipe
has_many subrecipes
has_many components
End
您需要为每个项目提供一个表格,并为关联提供一个表格
#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)属于层次结构中较高的:recipe,以及层次结构中较低的:subrecipe,但与recipe具有相同的类类型。