ActiveDecoratorをControllerで使いたいっ![Rails]
2021年5月21日
UserDecorator#name_genderっていうのを追加したまでは良かったんですが、これjsonで返したいなーと。
module UserDecorator
def name_gender
"#{name}(#{gender})"
end
end
もちろんView(erb)であれば
<%= @user.name_gender %>
と呼べるんですが、
コントローラーでjsonを返してもname_genderが入ってない
class UserController < ApplicationController
def index
@user = User.find(1)
render json: @user
end
end
decorateを直接呼び出すといけるらしい
class UserController < ApplicationController
def index
@user = User.find(1)
decorate_user = ActiveDecorator::Decorator.instance.decorate(@user)
render json: {
name_gender: decorate_user.name_gender
}
end
end
参考
amatsuda/active_decorator: ORM agnostic truly Object-Oriented view helper for Rails 4, 5, and 6