ActiveModel 序列化器继承

ActiveModel serializer inheritance

假设我有这个序列化程序

    class FooSerializer < ActiveModel::Serializer
      attributes :this, :that, :the_other

      def this
        SomeThing.expensive(this)
      end

      def that
        SomeThing.expensive(that)
      end

      def the_other
        SomeThing.expensive(the_other)
      end
    end

单个序列化值的操作有些昂贵...

然后我有另一个序列化程序可以使用它,但不是 return 所有成员:

    class BarSerializer < FooSerializr
      attributes :the_other
    end

这不起作用...BarSerializer 仍然会有这个、那个和 the_other...

如何利用继承而不自动获取相同的属性?我正在寻找模块混合以外的解决方案。

原来答案是利用魔法include_xxx?方法...

class BarSerializer < FooSerializer
  def include_this?; false; end
  def include_that?; false; end
end

这将使它只序列化“the_other”

BarSerializer 设为父 class 并将方法 the_other 放入其中。 FooSerializer 将仅继承 BarSerializer.

中定义的方法和属性