2012-05-27 67 views
0

我试图理解和实现Rails中的活动记录关联,并且在理解如何组合我需要的特定关系时遇到了一些麻烦。Rails中的模型关联 - 多个模型中的多对多

我有一个食谱模型和一个原料模型。许多配料将属于一个配方,因此,食谱会有很多配料。我无法理解如何通过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中的关联线不正确。

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

回答

1

你的Recipe模型应该有一个has_and_belongs_to_many与配料的关系,而不是has_many。这允许单一配方具有许多配料(即,您可以做@recipe.ingredients),而单一配料可以在许多配方中(@ingredient.recipes)。

第一次出现时看起来有些奇怪,但一旦您熟悉了Rails关系如何工作,它就变得直观起来。你在正确的轨道上。

+0

有关具体示例,请参见此页面:http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association –

1

has_many关系实现一对多映射,而has_and_belongs_to_many实现多对多映射。所以has_many与belongs_to配对,而has_and_belongs_to_many配对在一起。

配方和成分之间的关​​系将是一个多对多的一个,如果你也想找出关系等,其食谱特定成分中被使用。

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

您可以查看this stackoverflow question以更好地了解连接表的格式。