デコレータ
デコレータを導入することによって、ビューにロジックを書いたりモデルを肥大化させずに済む。
Helperとの違いは?
Helper:モデルに依存しないビューロジックを書く
Decorator:モデルに依存したビューロジックを書く
インストール
gem 'draper'
デコレータの生成
ApplicationDecoratorの生成
# ApplicationDecoratorの生成 $ rails generate draper:install # 例:UserDecoratorの生成 $ rails generate resource User # Userモデルが作られていないとき $ rails generate decorator User # Userモデルがもう作ってあるとき
デコレータファイルの記述
objectでインスタンスにアクセスする。
またdelegate_allでそのモデルのメソッド(属性へのアクセサなど)がすべて使えるようになる。
class UserDecorator < Draper::Decorator delegate_all def full_name "#{object.last_name} #{object.first_name}" end end
ビューの記述
インスタンスにdecorateメソッドとデコレータのメソッドをチェーンさせる。
<%= current_user.decorate.full_name %>