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