りゅうじの学習blog

学習したことをアウトプットしていきます。

Decoratorでフルネームを表示させる(Draper)

こんにちは、りゅうじです。

Decorator とは

Model とView の中間に追加するものです。

Model→View
だったのを
Model→Decorator→View
こうする。

ここで思いました。似たようなものあったな…と。

helper です。

まずここの違いを簡単に説明します。

Decorator⇨モデルに依存するロジックを書く
helper⇨モデルに依存しないロジックを書く

モデルに直接関係しているロジックかそうでないかで使い分ければ良いという事ですね。

RailsにはDecoratorをgemで導入できるものがいくつかあるのですが

今回は、最もダウンロード数が多い Draperを使ってDecoratorを導入してみます。

今回はフルネームを表示させます。

手順

  1. draperをインストールする
  2. 使いたいモデルと紐付けてジェネレイト
  3. 作成したDecoratorファイルにロジックを書く
  4. ビューに書いて表示する

1.draperをインストールする

#Gemfile
gem 'draper
#ターミナル
$ bundle install --path vendor/bundle

これで draper インストール完了です。

#ターミナル
$ rails generate draper:install

application_decorator.rb を作成

このコマンドを実行する事で簡単ににデコレーター層を追加することができます。

2.使いたいモデルと紐付けてジェネレイト

#ターミナル
$ bundle exec rails g decorator User

user_decorator.rb が作られる

3.作成したDecoratorファイルにロジックを書く

#user_decorator.rb
class UserDecorator < Draper::Decorator
  delegate_all

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

4.ビューに書いて表示する

#どこかのview
<%= current_user.decorate.full_name %>

今回は現在のユーザーのフルネームを表示させる様に current_user を使用します。

最後に

読んで頂いた方、ありがとうございました。