Rails decoraterでviewをすっきりさせるメモ
<User id: 1, email: "test@example.com", first_name: "foo", last_name: "baa">
Userにfirst_name: foo, last_name: baaさんがいるとしてviewでフルネームを表示させようとすると
<%= "#{@user.first_name} #{@user.last_name}" %>
という感じで式展開しなくてはならない。モデルのインスタンスに対してもっと複雑な加工をしなくてはならないとするとよりコードが長くなり見づらくなる。
そこでModelとViewの中間にデータの加工の役割を担うものとして Draperを導入する。
gem 'draper'
$rails generate draper:install
$rails generate decorator User
#app/decoraters/user_decorater.rb
class UserDecorator < Draper::Decorator
delegate_all
def full_name
"#{object.last_name} #{object.first_name}"
end
end
これでviewで
<%= "#{@user.first_name} #{@user.last_name}" %>
と書いていたものが
<%= @user.decorate.full_name %>
と書けるようになった。
#UserController
@user = User.first.decorate
コントローラーで上記のように書いておくとviewで.decorateを省略できる。
この記事が気に入ったらサポートをしてみませんか?