ActiveRecordSerializerでattributesを条件付きにしたい時の注意点

要約

  • attributesを条件付きにすることは実はできない
  • 諦めてattribute使うべき

検証

class UserSerializer < ActiveModel::Serializer
  attributes :id, name

  # NOTE: NG ケース
  attributes :secrets, if: :signed_in?

  def signed_in?
    # 何らかの認証処理
  end
end
Error
TypeError ({:if=>:signed_in?} is not a symbol nor a string):

代替策としてどうするか

class UserSerializer < ActiveModel::Serializer
  attributes :id, name

  # NOTE: attributeに変更
  attribute :secrets, if: :signed_in?

  def signed_in?
    # 何らかの認証処理
  end
end

関連リンク

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.