ActiveDecoratorで作ったメソッドにアクセスできなかったのでメモ。
@hoge.piyo.decorate_methodみたいな感じで、Hogeモデルに対してbelongs_toなモデル(Piyo)のメソッド(PiyoDecoratorで定義したdecorate_method)にアクセスしようとしたらmethod_missingになってしまった。
ググったら以下のサイトとスライドがとても分かりやすかった。
ActiveDecoratorが有効になるのは、renderされるタイミングrender partialされるタイミングで、そのときに渡されている変数に対してのみらしい。
なので、@hoge.piyoをrender partialのlocalesで変数として違うテンプレートに渡すなどをすればいいらしい。
だが、そこまでするほどでもないなー、仰々しい…という場合は、@を付けてしまえばいいなと思った。つまり、こう。
class HogeController < ApplicationController def show @hoge = Hoge.find params[:id] @piyo = @hoge.piyo end end
こうしてしまえば、@piyoはActiveDecoratorが有効になった状態になるので、普通にviewで@piyo.decorate_methodが使えるようになる。