2017-01-31 8 views
0

Рассмотрим ниже двух лиц: почт, АвторыКак группа ассоциаций атрибутов в коллекции (Active Model Serializer)

class PostSerializer < ActiveModel::Serializer 
    attributes :id, :title, author_id 
    belongs_to :author 
end 

Class AuthorSerializer < ActiveModel::Serializer 
    attributes :id, :name 
end 

с помощью „адаптера JSON“, для указательного действия PostsController мы получаем ответ как указано ниже:

{ 
    "posts":[ 
    { 
     "id":1, 
     "title":"Hic consectetur et delectus", 
     "author_id": 1, 
     "author":{"id":1,"name":"Author-A"} 
    }, 
    { 
     "id":2, 
     "title":"Hic consectetur et delectus", 
     "author_id": 2, 
     "author":{"id":2,"name":"Author-B"} 
    }, 
    { 
     "id":3, 
     "title":"Hic consectetur et delectus", 
     "author_id": 1, 
     "author":{"id":1,"name":"Author-A"} 
    } 
    ] 
} 

Возможно ли группировать данные авторов за пределами данных Почты для бокового нагружения? (как показано ниже)

{ 
    posts:[{...}, {...}, {...}], 
    authors:[ 
    {id:1, name:'Author-A'}, 
    {id:2, name:'Author-B'} 
    ] 
} 
+0

Это вполне возможно, но тогда вы потеряете отношение .. что это делает ... это так же хорошо, как наличие двух объектов ActiveRecord по отдельности. – Abhinay

+0

В системе есть несколько компонентов, которые ожидают данные в вышеупомянутом формате. Это возможно в AMS 0.8.x с использованием вставки: ids, но не удалось найти эквивалент для этого в AMS 0.10.x –

+0

0.8 можно подумать о раннем проекте jsonapi. Embed стал включенным. – BF4

ответ

0

В качестве обходного пути, мы создали собственный адаптер, расширяющий адаптер JSon и изменяющий хэш нашего нужного формата в serializable_hash метод (...)

class CustomAdapter < ActiveModelSerializers::Adapter::Json 
    def serializable_hash(options = nil) 
    result_hash = super(options) 
    ... code to modify hash format ... 
    result_hash 
    end 
end 
0

Похоже, вы хотите подражать связанным с jsonapi отношениям. Итак, w json adapter, post имеет атрибут, чтобы все было прост, author_id, а затем вы откладываете почтовую коллекцию отдельно от авторов и генерируете ответ, или вы их смешиваете и уменьшаете. Вы можете просто сделать как [сообщения, авторы]!