有条件地覆盖活动模型序列化器关联方法

时间:2016-03-30 22:23:38

标签: ruby-on-rails ruby active-model-serializers

我正在编写包含has_one :source的序列化程序。 source可以是多种不同类型。当sourceFoo overriding the association methods时,我正在尝试缩小JSON。我试过这个:

def source
  return super unless source_type == 'Foo'
  render json: source, serializer: LimitedFooSerializer
end

然后我得到没有超类方法`source'

然后我尝试了:

def source
  render json: source unless source_type == 'Foo'
  render json: source, serializer: LimitedFooSerializer
end

但错误堆栈级别太深;大概这是一次无限递归。

我如何有条件地覆盖关联方法?

1 个答案:

答案 0 :(得分:1)

直接调用序列化程序:

def source
  if source_type == 'Foo'
    FooSerializer::LimitedFooSerializer.new(object.source)
  else
    object.source
  end
end

我必须使用object.source而不是source来避免递归。