Rails中的模型关联 - 多个模型的多对多关系

时间:2012-05-27 22:01:51

标签: ruby-on-rails ruby-on-rails-3 many-to-many associations

我试图在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中的关联行是不正确的。

我如何正确实施这些关系?

2 个答案:

答案 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以更好地了解联接表的格式。