Rails で view のロジックを切り出すために ActiveDecorator を使ってる.
The Ruby Toolbox で Rails Presenters のランキング見たら ActiveDecorator は全然人気なくて,Draper 最高!な雰囲気を感じる.うむ.
ちなみに ActiveDecorator の説明を見たら for Rails 3
って書いてあって ( ゚д゚) って顔したけど,GitHub の説明見たら for Rails 3 and Rails 4
ってなってて安心した.要メンテ!
なんて言ってみたものの,今使ってるの Rails 3.2.21 なんで関係ないんですけどもw
ActiveDecorator - The Ruby Toolbox
A simple and Rubyish view helper for Rails 3
GitHub - amatsuda/active_decorator: ORM agnostic truly Object-Oriented view helper for Rails 3, 4 and 5
A simple and Rubyish view helper for Rails 3 and Rails 4. Keep your helpers and views Object-Oriented!
関連先のモデルをデコるときは partial で
本題に入ろう.自戒の念も込めて.
ActiveDecorator の思想として,関連モデルはデコれないっていうのは頭に入ってるんだけど,毎回忘れちゃってて,いざ動かしたら undefined method
になって「ぬっほー!」って叫ぶ.そんなお決まりパターンを繰り返してる.
例は悪いけど,例えばこんな感じで「ユーザーが所属してる企業のロゴをデコる」場合,undefined method 'logo'
ってなる.@user
の関連先である @user.company
をデコろうとしてるから.初めて使う場合ここでハマる.
# undefined method 'logo' @user.company.logo
解決方法としては partial でコンテキストを絞る.
index.html.haml
= render partial: 'logo', locals: { company: @user.company }
_logo.html.haml
company.logo
デコれる!無事解決!
まとめ
Draper 初体験しないと!