model作成を行い、アソシエーションで関連付けを行うと、自動的にFK(外部キー)が付与される。
この規則について考える
User モデルとPostモデルを作成しUserモデルとPostモデルは一対多の関係にあるとする
(userモデルに対するpostモデルのFKはuser_id)
(postモデルに対するuserモデルのFKはuserモデルのPK(主キー))
画像汚くてすみません。
以下 コード例
has_many :posts
belongs_to :user
postモデルのbelongs_to :user から考えると、belongs_to でpostの1レコードに対し必ずuserモデルの主キーは存在する。
そのため、post.rbに belongs_to :userと記載することでbelongs_to :モデル名のモデル名を元にして、そのモデルのPKをFKと認識する。
一方,
userモデルのhas_many :posts から見ると参照すべきカラムはPKではない。userモデルの1レコードに対し必ず対応すべきなのはpostモデルでFK用に作成したカラムのuser_idとなる。
そのため、user.rb にhas_many :postsと記載すると、自身のモデル名(今回だとuser)を元に参照先モデルのカラムを探しにいき、(自身のmodel名)_id と一致するカラムをFKと認識する。
【まとめ】
has_manyでは(自身のモデルの名前)_idというカラムを参照先モデルの中から探し、FKとする。
belongs_toでは参照先モデルのPKをFKとする。
間違えていたらコメントください。