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サポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (20件) を見る