Railsを書いていて「モデルのstatusごとに違うリンクを表示させたいんだけどなー」みたいなときありませんか?
「Viewに条件分岐書くと汚くなるし、Modelに書くのもちょっと違う。かといって、Modelの情報をHelperに渡して、Helperでごにょごにょやるのもなんだかな」
そんな悩みを解決してくれる、ActiveDecoratorというGemを使ってみた際のメモです。
モデルとビューの橋渡し役 ActiveDecorator
モデルが持っているデータをViewで表示する場合に、Helperでごにょごにょ頑張るのではなくモデルから表示を整形するメソッドを呼び出したい。その表示するためのメソッドをモデルに書いてしまうと、モデルが肥大化してしまう。
モデルはデータベースとのやりとりを疎で扱うのがいいので、新しくDecorator層を作るのが解決方法の一つ。
RailsでDecorator層をカンタンに導入するためのGemがActiveDecoratorです。
ActiveDecoratorをインストール
1. おなじみのbundle install
おなじみの、Gemfile追加からのbundle install
です。
gem `active_decorator`
2. generateコマンドを叩きましょ
次に、decorator
ファイルを生成する
$ rails g decorator モデル名
このおまじないを唱えると、app/decorator/モデル名_decorator.rb
のファイルが生成される
3. decoratorファイルにメソッドを記述
app/decorator/モデル名_decorator.rb
に書いていきましょ
decoratorのファイルの中だったら、helperを書くように書けるので便利です
link_toとかhelperの中で書けるのでとっても便利
それでいて、ModelとViewが汚れないのでGood