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_namefirst_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 + メソッド名という形で呼び出します。