我试图在Rails中理解并实现Active Record Associations,并且在理解如何整合我需要的特定关系时遇到一些麻烦。
我有食谱模型和成分模型。许多成分将属于一个食谱,因此,食谱将有许多成分。我无法掌握如何通过MySQL处理这个问题,以及如何正确地在模型中实现这些关系。到目前为止,这是我相对稀疏的代码:
模型/ recipe.rb
class Recipe < ActiveRecord::Base
has_many :ingredients
end
模型/ ingredient.rb
class Ingredient < ActiveRecord::Base
has_and_belongs_to_many :recipes
end
但是,我非常确定ingredient.rb中的关联行是不正确的。
我如何正确实施这些关系?
答案 0 :(得分:1)
您的Recipe
模型与成分之间应该has_and_belongs_to_many
关系,而不是has_many
。这允许单个配方具有许多成分(即,您可以@recipe.ingredients
),而单个成分可以包含许多配方(@ingredient.recipes
)。
首次出现时似乎有点奇怪,但是一旦你了解了Rails关系的工作方式,就会变得直观。你走在正确的轨道上。
答案 1 :(得分:1)
has_many关系实现一对多映射,而has_and_belongs_to_many实现多对多映射。因此,has_many与belongs_to配对,而has_and_belongs_to_many配对在一起。
如果您还想了解使用特定成分的配方之类的关系,配方和配料之间的关系将是多对多的。
要在mysql数据库中实现has_and_belongs_to_many,您必须创建一个映射两个表之间所有链接的第三个连接表。
您可以查看this stackoverflow question以更好地了解联接表的格式。