2020/12/30 decorator
参考
decoratorとは
ソフトウェアのデザインパターンの一つです。
既存のオブジェクトを新しいDecoratorオブジェクトでラップすることで既存の関数やクラスの中身を直接触ることなく、その外側から機能を追加したり書き換えたりする。
また、既存のクラスを拡張する際にクラスの継承の代替手段として用いられます。
基本的にはビューに表示するためのロジックを記述する場所。
helperやモデルに記述しない理由
それぞれの役割分担をきっちりすることでコードをわかりやすく書く必要がある。
モデル→DBにアクセスする処理を書く
helper→モデルから独立しており、モデルに直接関係していない処理を書く
decorator→特定のモデルに関連した処理を書く
導入する
gem 'draper' #bundle installする rails generate draper:install #アプリケーションにデコレーター層(デコレータ用のフォルダ)を作る rails generate decorator User #モデルに紐づいたデコレータファイルを作成する
delegate_allとは、UserモデルのメソッドをUserDecoratorクラスでも使用できるようにするための記述です。これがあることによってuser.nameなどuserモデルが所有するインスタンスメソッドがUserDecoratorクラスのオブジェクトにも使用することが可能となります。
メソッドを定義する
class UserDecorator < Draper::Decorator delegate_all def full_name last_name + ' ' + first_name end end
viewから呼び出すときは
<%= current_user.decorate.full_name %>
のようにdecorate.を記述する