2015-04-25 3 views
1

Я имею в виду, как должен быть реализован сериализатор для работы с коллекцией?AMS: Как использовать сериализатор коллекции?

От активной документации модель сериализаторы:

render json: @posts, serializer: PaginatedSerializer, each_serializer: PostPreviewSerializer 

Как должно быть PaginatedSerializer реализовано?

я сделал что-то вроде этого:

@posts = Post.all 
render json: @posts 

И это работало нормально и не требуется ни какой-то особый сбор сериализатору, ни each_serializer.

Итак, теперь я смущен тем, зачем вам нужен сериализатор коллекции.

+0

Если у вас есть об этом подробнее, я заинтересован! – gfd

ответ

1

Чтобы начать ответ о «почему бы вам нужен коллекции сериалайзер»,

У меня есть некоторые методы контроллера, которые возвращают «несортированные» списки, как так:

[ { 
id: 2, 
collection_id: 3, 
text_choice: "Cover" 
}, 
{ 
id: 3, 
collection_id: 3, 
text_choice: "Remix" 
}, 
{ 
id: 4, 
collection_id: 4, 
text_choice: "Studio" 
} ] 

Но я хочу чтобы вернуть эти записи, сгруппированные по collection_id и ответить на JSON как это:

[ 
{ 
"3": [ { 
    id: 2, 
    text_choice: "Cover" 
}, 
{ 
    id: 3, 
    text_choice: "Remix" 
} ] 
}, 
{ 
"4": [ { 
id: 4, 
text_choice: "Studio" 
} ] 
} 
] 

(извините за форматирование: делать это «слепой» - это сложный вопрос для возвышенного текстового пользователя;))

Итак, я пришел к выводу, что для этого преобразования мне необходимо реализовать свой собственный CollectionSerializer. Но, как и вы, я не мог найти никакого примера; на самом деле, вы дали самый продвинутый ответ, который есть на данный момент! Я постараюсь играть с вашим стартом и, вероятно, создать проблему с GH.

Я буду обновлять, если я что-нибудь ...

Для кого: не стесняйтесь, чтобы помочь нам, если вы знаете больше, чем у нас !!

1

Без перечисления сериализаторов Я не вижу, как вы получите постраничные результаты в данных JSON, хотя вы можете получить некоторые сериализованные данные, если вы внедрили сериализатор PostSerializer.

CollectionSerializer (PaginationSerializer) - это сериализатор, который предоставляет атрибуты для всего набора результатов, предоставляющего данные подкачки в результатах JSON, такие как количество страниц и итоговые записи.

В этом wiki page я привел пример PaginationSerializer. Это довольно общий, так что это будет для любой модели.

Похоже, что вы уже можете понять часть PagePreviewSerializer, но я также рассмотрю это на всякий случай. Это сериализатор для определения того, какие атрибуты отображаются для каждого сообщения, отображаемого на странице.

PaginatedSerializer может быть сгенерирован с помощью rails g serializer post (при условии, что модель называется «пост». Затем вам просто нужно переименовать ее в PostPreviewSerializer и добавить дополнительные атрибуты в определение «атрибуты» в зависимости от того, какие атрибуты вы хотите отображать в JSON.Например, вы можете объявить его с помощью attributes :id, :title, :content, если это ваши атрибуты.

Bonus комментарий

я заметил, когда, следуя инструкции на странице вики, что PaginationSerializer унаследована от CollectionSerializer. Этот сериализатор не существовал в моей версии AMS gem, но получается, что это просто ArraySerializer переименовано. Так что наследование от ArraySerializer сработало для меня.