Rails モデルの関連付けとは?
メッセージアプリを作る教材をやっていたら、突然出てきた「モデルの関連付け」。 使い方はわかったけれど、この「関連付け」って一体なに?何のためにするの?
疑問におもったのでお馴染みRailsガイドで調べてみました。
関連付け(association)
目的
モデル同士を関連付けることで、コードの共通操作を簡単にできるようにする。
例
例えば、ユーザーがそれぞれメッセージ投稿を行えるアプリケーションを作っているとして。
UserモデルとPostモデルがあったとする。
もし関連付けがされていないと、
- Userが1つ投稿するときは、Post.createに毎回user.idを指定する文言を入れなければいけない。
@post = Post.create(user_id: @user.id)
- Userを削除するときは、そのuser.idで登録されたメッセージを探し、メッセージを一つ一つ削除するコードを書いてから、user.destroyをしなければならない。
@posts = Post.where(user_id: @user.id)
@posts.each do |post| post.destroy end @user.destroy
- 関連付けによってUserモデルとPostモデルが適切に結びつけられていれば、こうした記述をシンプルにすることができる。
class User < ApplicationRecord has_many :posts, dependend: :destroy end class Post < ApplicationRecord belongs_to :user end
@post = @user.posts.create
@user.destroy
Railsのモデルの関連付けは6種類ある
belongs_to
has_one
has_many
has_many :through
has_one :through
has_and_belongs_to_many
関連付けはマクロのような呼び出しとして実装されている
「関連付け」はRailsの便利な機能だった
関連付けを書くだけで、Railsが勝手にモデル名を推測して、モデル間でコードの共通操作ができるようになる…。
すごいですね。
Railsのソースコードにも記載があったので、今度読んでみようと思います。