2015-03-19 2 views
0

У меня есть следующий ActiveModel::Serializer классаПеренастройка ActiveModel :: Serializer вниз от v0.9.2 до 0,8, has_many не сериализован

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?

Update

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

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 

Надеясь, что бы получить Serializer испускать whatsits список под ключ _embedded, но увы этого Бесполезный 't work ..

+0

АНИ для 0.8 здесь https://github.com/rails-api/active_model_serializers/tree/8d31f7ee8c0ea3ed83ab871765f1444291278b41#embedding-associations нет 'embed_namespace'. Возможно, 'has_many: whatsits, root:: _embedded' – robertjlooby

+0

Увы, без изменения' embed_namespace'' 'root' не помогает. Думаю, мне просто нужно сделать это вручную. Roll on AMS v0.10 –

ответ

0

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

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