昨日リリースされた active_decorator 0.9.0 で,関連モデルオブジェクトが自動的に
デコレートされるようになったようです。
Changelog や HISTORY の類が無いので,何が変わったのか,にわかには分からないのですが,README.md の「Features」の四番目にこっそり
fetching already decorated Active Record model object's association
が追加されてました。
今までは,あらわにデコレートするコードを書くか,関連モデルオブジェクト部分の
ビューを別のテンプレートに切り出すしかありませんでした。
すばらしい!
なんのこっちゃ?
たとえば,一つの Publisher を表示する publishers#show のビューにおいて,
Publisher にぶら下がっている(belongs_to している)Book たちの一覧を
表示するとしますよね。
コントローラーで
@publisher = Publisher.find(params[:id])
すると,これがビューに渡されたときに自動的にデコレートされ,この @publisher
に対し,PublisherDecorator
のメソッドが呼べます。
しかし,バージョン 0.8.0 までの場合,@publisher.books
の要素たちはデコレートされないので,そいつらに対し BookDecorator
のメソッドを呼び出そうとしても NoMethodError
になっていました。
バージョン 0.9.0 では @publisher.books
たちも自動でデコレートされるので,何も考えずとも同じテンプレート内で BookDecorator
のメソッドが呼べる,というわけです。