Миграция ActiveModel::Serializer с версии 0.9.2 на 0.8, has_many не сериализуется

У меня есть следующий класс ActiveModel::Serializer

class MyThingySerializer < ActiveModel::Serializer
  root false

  attributes :id, :name, :description

  has_many :whatsits, embed_namespace: :_embedded

  delegate :whatsits, to: :object

end

Он отлично работал под AMS 0.9.2, но для добавления необязательного атрибута с использованием механизма include_attributename? мне сказали откатиться до AMS 0.8.

Теперь мой whatsits не отображается в моем сериализованном выводе под атрибутом _embedded.

Есть ли что-то особенное, что мне нужно сделать, чтобы вернуть встроенный whatsits?

Обновить

Я попытался добавить в свой сериализатор следующий метод:

def whatsits
  associated = self.class._associations[:whatsits]
  associated.options[:root] = associated.options[:embed_namespace]
  associated.options[:embed] = :objects
  associated.options[:include] = true
  object.whatsits
end

Надеялся, что Сериализатор выдаст список whatsits под ключом _embedded, но, увы, это не сработало.


person Dave Sag    schedule 19.03.2015    source источник
comment
API для версии 0.8 находится здесь github.com/rails-api/active_model_serializers/ дерево/ нет embed_namespace. Возможно has_many :whatsits, root: :_embedded   -  person robertjlooby    schedule 19.03.2015
comment
Увы, никакая замена embed_namespace на root не помогает. Я просто должен сделать это вручную, я думаю. Накатите на AMS v0.10   -  person Dave Sag    schedule 20.03.2015


Ответы (1)


Это работает.

class MyThingySerializer < ActiveModel::Serializer
  root false

  attributes :id, :name, :description, :_embedded

  # force the whatsits list to sit under '_embedded'.
  def _embedded
    {
      whatsits: object. whatsits.map {|whatsit| WhatsitSerializer.new(whatsit) } || []
    }
  end
end
person Dave Sag    schedule 23.03.2015