デコレータ

デコレータを導入することによって、ビューにロジックを書いたりモデルを肥大化させずに済む。

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 %>