リア充爆発日記

You don't even know what ria-ju really is.

belongs_toでthrough的なことを実現する

例えば複数画像付き投稿ができる掲示板をイメージしたとき、スレッド→投稿→画像という多段構成のモデルができる。

で、となりあう関係のモデル同士は、has_manyとbelongs_toで参照しあえるけど、スレッド→画像や画像→スレッドは一工夫する必要がある。

スレッド→画像はhas_many throughを使えばいいけど、逆の画像→スレッドbelongs_toでthroghはできないので困った。誰かがhas_oneを使うという手を挙げてたけどバッドノウハウ的にしか思えなくてしっくり来ない。

で、いろいろ調べてみたところdelegateを使うのが一番スマートに思えた。

class Thread < ActiveRecord::Base
  has_many :posts
  has_many :post_images, through: :post

class Post < ActiveRecord::Base
  belongs_to :thread
  has_many: post_images

class PostImage < ActiveRecord::Base
  belongs_to :post
  delegate :thread, to: :post

こんな感じ。

delegateモジュール便利だわー。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)