Наследование сериализатора ActiveModel

Скажем, у меня есть этот сериализатор

    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

Если операции для отдельных сериализованных значений несколько дороги...

И затем у меня есть другой сериализатор, который должен использовать это, но не возвращать всех членов:

    class BarSerializer < FooSerializr
      attributes :the_other
    end

Это не работает... У BarSerializer все еще есть это, это, и другое...

Как я могу использовать наследование, но не автоматически получать одинаковые атрибуты? Я ищу решение, отличное от модулей mixins.

Ответ 1

Выключает ответ на это, чтобы использовать волшебство include_xxx? методы...

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

Это приведет к сериализации "the_other"

Ответ 2

Сделайте класс BarSerializer для родителей и поместите в него метод the_other. FooSerializer наследует только метод и атрибут, определенные в BarSerializer.