zackey推し

IT系のこと書くぞい

【Ruby on Rails】Gem「ActiveDecorator」の紹介 View向けのメソッドを定義する

f:id:kic-yuuki:20190707164341p:plain

Userモデルみたいなクラスがあって、

  • first_name(姓)
  • last_name(名)

のようなカラムがあった場合、以下のようにfirst_nameとlast_nameを組み合わせて、full_nameという、Viewやレスポンス用のメソッドを実装するシーンがあるかと思います。

class User < ApplicationRecord
  def full_name
    first_name + last_name
  end
end

# 使用例(View側)
@user.full_name

ただ、このような実装はシステム拡大につれて多くなり、モデルのコードが冗長になるかと思います。

それを解消できるのがActiveDecoratorというGemです。

転職先でこのGemを知り、めっちゃ便利だと感じましたので、紹介したいと思います。

この記事なに? 🤔

この記事では、ActiveDecoratorの導入〜実装手順までを記載します。

導入・実装手順

Gemfileに以下を追記し、bundle installします。

gem 'active_decorator'

rails gコマンドを用いて、存在するモデルクラスに対してのDecoratorを作成します。

bundle exec rails g decorator user

すると、
app/decorators/user_decorator.rbというファイルが生成されていますので、View向けのメソッドを定義します。

module UserDecorator
  def full_name
    first_name + last_name
  end
end

Viewにて以下のようにすることで、使用することができます。

@user.full_name

View以外で使用したい場合

上記Wikiに記載されている、
ActiveDecorator::Decorator.instance.decorateでDecoratorに定義したメソッドを使用することができます。

以下、使用例となります。

user = ActiveDecorator::Decorator.instance.decorate(User.find(1))
user.full_name

おわり

短いですが、以上になります。

(仕組みを知るため、ActiveDecoratorのGemも読んでみよう。)

参考記事