深いアソシエーションを組んだ時はdelegateを設定しよう

こんにちは!kossyです!




さて、今回はメソッドの移譲を実現するメソッド、delegateメソッドの使い方を
ブログに残してみたいと思います。




環境
Rails 5.2.2
Ruby 2.5.1
MacOS Mojave





ユースケース

例えば、
・Userクラス(name, email, profile_photo, password )
・Postクラス(title, content, user_id)
があったとして、
User has_many postsの関係とし、
特定のポストのユーザーのプロフィール写真を取得したいとします。

その場合、

@post.user.profile_photo

として値を取得すると思うのですが、
ここでdelegateメソッドを使うと、

@post.profile_photo

で値が取れるようになります。



実装手順

実装はとても簡単です。

class Post
  belongs_to :user
  delegate :profile_photo, to: :user
end

これで実装は終了です。
めちゃくちゃ簡単なのでぜひ試してみてください。