0

ユーザーがレシピをアップロードしてお気に入りのレシピを保存できる小さなアプリがあります。国と呼ばれる別のモデルがあり、その中に世界のすべての国が含まれており、ユーザーはドロップダウンから 1 つを選択できます。

当初、私は協会を持っていました

レシピ

has_one :country

belongs_to :recipe

いくつかの調査の後、正しい関連付けは

レシピ

belongs_to :country

belongs_to :recipe

レシピ モデル内の外部キー country_id。

私はもう少し読むつもりですが、なぜそれがこの協会であり、最初のものではないのかについて誰かが説明できるかどうか疑問に思っていました

4

2 に答える 2

2

私はあなたがこのような協会を構築したいゲストです:

  • 国は多くのレシピを持つことができます
  • レシピは1つの国に属しています

その場合、関連付けを次のように定義する必要があります。

国:

has_many :recipes

レシピ:

belongs_to :country

そして、私はあなたの2番目の関連付けも間違っていると思います。

Recipeモデルで定義する場合belongs_to :country、Recipeテーブルには。という列が必要であることを意味しますcountry_id。これは、カントリーモデルの外部キーです。

最初の定義の関連付けでは、Countryモデルにと呼ばれる列がありますrecipe_id。したがって、すべての国にはレシピが1つしかないので、それはあなたが望むものではありませんよね?なぜそれが機能しないのですか?1つの国では、レコードが1つしかないため、1つの国は、からアクセスできるレシピを1つだけ持つことができますrecipe_id

最初の関連付けでは、関連付けは1対1(1つの国には1つのレシピがあります)ですが、実際には1対多(1つの国には多くのレシピがあります)です。したがって、最初の関連付けが機能しないのはそのためです(2番目も)。

ここで覚えておく必要がある主なことは、どのモデルにbelongs_to関連付けを設定するか、そのモデルには。という列が含まれること'association name'_idです。has_one使用とbelongs_toのみの違いは、外部キーを配置する場所関連付けの意味です。明確にするためにここをチェックしてください。

于 2012-11-12T09:43:38.140 に答える
1

これが正しい関連付けかどうかはわかりません。外部キーを持つモデルでは、常に belongs_to アソシエーションが使用されます (こちらを参照)。私が考える限り、両方のテーブルに外部キーを持つことは良い考えではありません。最後の関連付けが正しいと思う理由を説明できますか?

ところで、正しい関連付けは次のとおりだと思います:

于 2012-11-12T09:33:32.607 に答える