【问题标题】:Model Associations in Rails - many-to-many for multiple modelsRails 中的模型关联 - 多个模型的多对多
【发布时间】:2012-05-27 22:01:50
【问题描述】:

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

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

models/recipe.rb

class Recipe < ActiveRecord::Base
  has_many :ingredients
end

models/ingredient.rb

class Ingredient < ActiveRecord::Base
  has_and_belongs_to_many :recipes
end

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

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

【问题讨论】:

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


    【解决方案1】:

    您的Recipe 模型应该与成分有has_and_belongs_to_many 关系,而不是has_many。这允许一个配方包含许多成分(即您可以使用@recipe.ingredients),而一种成分可以包含在多个配方中(@ingredient.recipes)。

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多