draperを使ってviewに書いてしまいがちなロジックを減らす2

先日書いた記事でdraperについて紹介しましたが、これの続きです。
railsでページネイションを使う場合、最近はkaminariを使うケースが多いと思います。

で、このkaminariを使って取得した値(例えばMovieというモデルがあるならばMovie.page(1).per(20)というように取得したMovieモデルの配列)の一要素に含まれるUserにこのdraperで定義したメソッドを適用するには一工夫必要です。
何もしなければcurrent_pageがないよーというエラーが出たりします。

じゃ、何をするのか。それはズバリ、config/initializers/draper.rbを作って以下のコードを追加するだけです。

Draper::CollectionDecorator.delegate :current_page, :total_pages, :limit_value, :total_count

後は使う側で以下のようにコードをすればよいです。

@movies = MovieDecorator.page(1).per(20).decorate

で、app/ を以下のように作成してちゃんとcreated_timeメソッドが使えるかテストしてみると使えることが確認できます

class MovieDecorator < Draper::Decorator
  delegate_all

  def created_time
    movie.created_at.strftime("%y-%m-%d %H:%M")
  end
end

以上です。モデルの中の値を、ある条件かだけ表示を変えたい時とかhelperを使わずにこのdeaoratorを使ってやるようにする。その際はこのgemを使うといいかもしれませんね。