draperを使ってviewに書いてしまったロジックを減らす
view側に表示するためにデータを整形するロジックを書いてしまうことなどあると思います。
そういう場合helperを使うというのも一つ手ではありますが、最近ではpresenterという層を設けてviewからそういったロジック部分を取り除くやり方が主流となって来ています。
railsではそういった時に使うフレームワークとしてActiveDecoratorなどありますが、今回はdraperです。
1.Gemfileに追加してbundle install
gem 'draper'
2.ファイルを生成。今回はmovieというモデルに対するpresenterを作る
bundle exec rails g decorator movie
3.生成されたファイルにメソッドを追加。簡単な例として日付の表示フォーマットを変えるものを追加する
class MovieDecorator < Draper::Decorator delegate_all # Define presentation-specific methods here. Helpers are accessed through # `helpers` (aka `h`). You can override attributes, for example: # # def created_at # helpers.content_tag :span, class: 'time' do # object.created_at.strftime("%a %m/%d/%y") # end # end def created_at movie.created_at.strftime("%y-%m-%d %H:%M") end end
4.コントローラでこのMovieDecoratorを使うように変更する
今回は詳細表示の画面
def show @movie = MovieDecorator.find(params[:id]) end
これでshow.html.erbの中では単に@movie.created_atとするだけで整形された日付が表示されます