0

Rails でアクティブ レコード アソシエーションを理解し実装しようとしていますが、必要な特定の関係をまとめる方法を理解するのに苦労しています。

Recipe モデルと Ingredients モデルがあります。多くの材料は 1 つのレシピに属するため、レシピには多くの材料が含まれます。これが 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

しかし、infinity.rb の関連行が間違っていることは確かです。

これらの関係を正しく実装するにはどうすればよいですか?

4

2 に答える 2

1

モデルは、ではなく材料との関係を持つRecipe必要があります。これにより、1つのレシピに多くの材料を含めることができます(つまり、実行できます)が、1つの材料に多くの材料を含めることができます()。has_and_belongs_to_manyhas_many@recipe.ingredients@ingredient.recipes

最初は奇妙に思えますが、Railsの関係がどのように機能するかを理解すると、直感的になります。あなたは正しい方向に進んでいます。

于 2012-05-27T22:07:23.533 に答える
1

has_many リレーションシップは 1 対多のマッピングを実装し、has_and_belongs_to_many は多対多のマッピングを実装します。したがって、has_many は belongs_to とペアになり、has_and_belongs_to_many はペアになります。

特定の材料がどのレシピで使用されているかなどの関係も知りたい場合、レシピと材料の関係は多対多になります。

mysql データベースに has_and_belongs_to_many を実装するには、2 つのテーブル間のすべてのリンクをマップする 3 番目の結合テーブルを作成する必要があります。

このstackoverflowの質問を見ると、結合テーブルの形式をよりよく理解できます。

于 2012-05-28T13:40:30.070 に答える