Decoratorでフルネームを表示させる(Draper)
こんにちは、りゅうじです。
Decorator
とは
Model とView の中間に追加するものです。
Model→View
だったのを
Model→Decorator→View
こうする。
ここで思いました。似たようなものあったな…と。
helper
です。
まずここの違いを簡単に説明します。
Decorator⇨モデルに依存するロジックを書く
helper⇨モデルに依存しないロジックを書く
モデルに直接関係しているロジックかそうでないかで使い分ければ良いという事ですね。
RailsにはDecoratorをgemで導入できるものがいくつかあるのですが
今回は、最もダウンロード数が多い Draper
を使ってDecoratorを導入してみます。
今回はフルネームを表示させます。
手順
- draperをインストールする
- 使いたいモデルと紐付けてジェネレイト
- 作成したDecoratorファイルにロジックを書く
- ビューに書いて表示する
1.draperをインストールする
#Gemfile
gem 'draper
#ターミナル
$ bundle install --path vendor/bundle
これで draper
インストール完了です。
#ターミナル
$ rails generate draper:install
application_decorator.rb
を作成
このコマンドを実行する事で簡単ににデコレーター層を追加することができます。
2.使いたいモデルと紐付けてジェネレイト
#ターミナル
$ bundle exec rails g decorator User
user_decorator.rb
が作られる
3.作成したDecoratorファイルにロジックを書く
#user_decorator.rb
class UserDecorator < Draper::Decorator
delegate_all
def full_name
"#{object.last_name} #{object.first_name}"
end
end
4.ビューに書いて表示する
#どこかのview
<%= current_user.decorate.full_name %>
今回は現在のユーザーのフルネームを表示させる様に current_user
を使用します。
最後に
読んで頂いた方、ありがとうございました。