decoratorの導入

gem 'draper'を使ってdecoratorを導入する。 decoratorとは 既存の関数やクラスの中身をいじることなく、外側から機能を追加したり、書き換えたりすることのできる。ソフトウェアのデザインパターンの一つ。 draperとは Railsのプレゼンテーション層の役割を担うGem。 プレゼンテーション層はViewとモデルの中間に位置し、モデルやビューに実装されやすい表示ロジック/フォーマットを記述する役割。 なぜモデルに記載しないのか 何でもモデルに記載すると、モデルが肥大化してしまうため。モデルにはDBにアクセスするような処理のみを記載しよう。 なぜヘルパーではダメなのか。 ヘルパーはモデルから独立し直接関係していない描画ロジックを実装するのに用いる。 Decoratorは特定のモデルに関連した描画ロジックを実装するのに用いる。 使い方 1.gem 'draper'をインストール 2.Railsアプリにdraperをインストール 3.指定したモデルに対応したdecoratorを作成 1. Gemfileに下を記入して、bundle installをターミナルで実行

gem 'draper'
  1. 下をターミナルで実行すると、インストールされ、decorators/applcation_decorator.rbが作成される。

rails generate draper:install
  1. Userモデルに対応したdecoratorが作成される。

rails generate decorator User

full_nameメソッドの作成 3.をすることで作成されたUserデコレーターの中に

class UserDecorator < Draper::Decorator
 delegate_all

 def full_name
   # object.last_name + " " + object.first_name
   "#{last_name} #{first_name}"
 end
end

と記述することで使うことができるようになる。delegate_allがあることで、コメントアウトしていない方のようにobectoなしで利用することができる。そのため、コメントアウトなしの記述のほうが短くてよい。 とうとうviewに呼び出していく。

<%= current_user.decorate.full_name %>

の記述で呼び出すことができる。

参考

https://qiita.com/jonson29/items/00077b54bb91ed74fdb8 https://note.com/johoiu/n/n9b4caee42724