如何通过对象参数为ActiveModel Serializer定义自定义属性?

时间:2016-04-01 18:32:06

标签: ruby-on-rails activemodel serializer

我有以下的Serializer类:

class BooksSerializer < ActiveModel::Serializer
  attributes :name, :position
  attributes :pages unless object.children.present?

但它因为SectionSerializer:Class的错误“未定义的方法`对象”而崩溃了。如何针对这些条件获得对象参数?

我只能在函数内部访问对象。例如:

def pages
  object.pages  ....
end

但我需要按条件从序列化中排除某些字段。

2 个答案:

答案 0 :(得分:2)

我找到了解决方案:

class BooksSerializer < ActiveModel::Serializer
  attributes :name
  def attributes(*args)
      hash = super
      hash[:pages] = pages unless object.children.present?          
      hash
  end

  def pages
   ....
  end
  ....
end

答案 1 :(得分:0)

这是一个更新的解决方案:

class BooksSerializer < ActiveModel::Serializer
  attributes :name
  attribute :pages, if: -> { object.children.present? }

  def pages
    ...
  end
end