railsにdecoratorを導入して使う
はじめに
railsにdecoratorを導入して使う方法について
decoratorの設定方法
デコレーターとは、主にモデルに関連するビューのロジックをおいておくための補助機能のようなものです。
ビューに直接メソッドを書いたりモデルに書いたりすると、コードが肥大化してDRYでもなくなってしまうため、デコレーターを使います。
drapperというGemをインストールすると使用できるようになります。
gem 'draper'
bundle install
します。
rails generate draper:install
drapperをインストールしたら、下記コマンドでデコレーターを作成できます。
$ rails generate decorator <モデル名> $ rails generate decorator user
例えば、ユーザーのlast_name
とfirst_name
を組み合わせたfull_name
メソッドを定義する場合、下記のようになります。
class UserDecorator < Draper::Decorator delegate_all def full_name "#{object.last_name} #{object.first_name}" end end
object
でモデルインスタンスにアクセスできます。
今回の場合だとuserモデルと関連づけているので、userモデルのインスタンスにアクセスできます。
<div class="dropdown-item"><%= current_user.decorate.full_name %></div>
ビュー側では、インスタンス変数 + decorate + メソッド名
という形で呼び出します。