私はあなたがこのような協会を構築したいゲストです:
- 国は多くのレシピを持つことができます
- レシピは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
のみの違いは、外部キーを配置する場所と関連付けの意味です。明確にするためにここをチェックしてください。