2012-05-27 148 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以更好地瞭解連接表的格式。