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も読んでみよう。)