アソシエーション(1対多の関係)
1.アソシエーションとは?
簡単に表現すると「各モデル同士を関連付ける」ということである。つまり、テーブル同士で関連付けておき、一方のモデルからもう一方のモデルにアクセスできるようにすることである。
例. 1人のuserが複数のコメントを所有するパターン(1対多の関係)
→「Aさん」とAさんのコメントである「おはよう」、「こんばんは」を結びつける。
→「Bさん」とBさんのコメントである「こんにちは」、「さようなら」を結びつける。
2.has_manyメソッドとbelongs_toメソッド
では、どのようにアソシエーションをコードで再現するのか示してみる。
上記の1人のuserが複数のコメントを所有するパターン(1対多の関係)で考えてみる。
(1) has_many
※上記の図はAさんとAさんが所有するコメントの関係であるが、Bさんも上記の図のように考える。
#Userモデル
class User < ApplicationRecord
has_many :comments #1人のuserが複数のcommentを所有するので複数形のcommentsになる。
end
(2) belongs_to
※上記の図は「おはよう」のコメントがAさんに所有されている関係であるが、その他のコメントも上記の図のように考える。
#Commentモデル
class Comment < ApplicationRecord
belongs_to :user #1つcommentは1人のuserが所有するので単数形のuserになる。
end
3.さいごに
アソシエーションの1対多における基本的な考え方を説明しました。今後も、多対多の関係など少し応用的な投稿にも継続的にしていきたいと思います。また、。誤り等ご指摘ありましたらコメントお願いします!