🦊

Rails Draperについて(自己学習記録)

2024/11/06に公開

Draperとは

DraperはRailsのプレゼンテーション層の役割を担うgem
プレゼンテーション層とはviewとmodelの中間に位置し、viewやmodelで
実装されやすい表示ロジック/フォーマットを記述する役割を担う

こちらのサイトを引用させていただきました
https://qiita.com/jonson29/items/00077b54bb91ed74fdb8

つまり、複雑なメソッドをdecoraterにまとめることでviewやmodelの肥大化を防ぐことができる。

helperとの違い

helperもDecoratorもviewをコーディングしやすくするための仕組みだが、
helperはモデルから独立し直接関係していない描画ロジックを実装するのに用いる
Decoratorは特定のモデルに関連した描画ロジックを実装するのに用いる

使い方

gem 'draper'
bundle install

デコレーターを生成

rails generate decorator User

今回はfull_nameメソッドをデコレータークラスで定義する

class UserDecorator < Draper::Decorator
  delegate_all

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

viewで使用

<%= @user.full_name %>

補足

delegate_allはdecoratorに存在しないメソッドがコールされた場合にモデルの処理を
実行する機能で、このコードがあることで、Userモデルのメソッドを使用することができる

Discussion