0

我正在尝试在 Rails 中理解和实现 Active Record 关联,但在理解如何将我需要的特定关系放在一起时遇到了一些麻烦。

我有一个食谱模型和一个成分模型。许多成分将属于一个单一的食谱,因此,一个食谱将有许多成分。我无法理解如何通过 MySQL 处理这些问题,以及如何在模型中正确实现这些关系。到目前为止,这是我拥有的(相对稀疏的)代码:

模型/recipe.rb

class Recipe < ActiveRecord::Base
  has_many :ingredients
end

模型/成分.rb

class Ingredient < ActiveRecord::Base
  has_and_belongs_to_many :recipes
end

但是,我相当肯定成分.rb 中的关联行是不正确的。

我将如何正确实现这些关系?

4

2 回答 2

1

您的Recipe模型应该has_and_belongs_to_many与成分而不是has_many. 这允许一个单一的食谱有许多成分(即你可以做@recipe.ingredients),而一个单一的成分可以在许多食谱中(@ingredient.recipes)。

刚开始的时候确实有点奇怪,但是一旦你了解了 Rails 关系的工作原理,它就会变得直观。你在正确的轨道上。

于 2012-05-27T22:07:23.533 回答
1

has_many 关系实现一对多映射,而 has_and_belongs_to_many 实现多对多映射。因此 has_many 与 belongs_to 配对,而 has_and_belongs_to_many 则配对在一起。

如果您还想找出特定成分用于哪些食谱之类的关系,那么食谱和成分之间的关​​系将是多对多的。

要在 mysql 数据库中实现 has_and_belongs_to_many,您必须创建第三个连接表来映射两个表之间的所有链接。

您可以查看这个 stackoverflow 问题,以更好地了解连接表的格式。

于 2012-05-28T13:40:30.070 回答