我的意思是如何实现序列化程序来处理集合?
从活动模型序列化程序文档:
render json: @posts, serializer: PaginatedSerializer, each_serializer: PostPreviewSerializer
PaginatedSerializer
应如何实施?
我做了类似的事情:
@posts = Post.all
render json: @posts
它工作正常,不需要也不需要一些特殊的集合序列化器,也不需要每个序列化器。
所以现在我很困惑为什么你需要一个集合序列化器。
答案 0 :(得分: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 :(得分:1)
如果没有列出序列化程序,我就不会看到如何在JSON数据中获得分页结果,但如果您实现了PostSerializer
序列化程序,则可以获得一些序列化数据。
CollectionSerializer
(PaginationSerializer
)是一个序列化程序,它为整个结果集提供属性,在JSON结果中提供分页数据,例如页数和总记录。
我在wiki page中看到了一个示例PaginationSerializer
。它非常通用,因此适用于任何型号。
听起来你可能已经理解了PagePreviewSerializer部分,但我也会覆盖它,以防万一。它是一个序列化程序,用于决定页面上显示的每个帖子显示哪些属性。
可以使用rails g serializer post
生成PaginatedSerializer(假设模型被调用" post"然后你只需要将它重命名为PostPreviewSerializer并为"属性添加额外的属性&# 34;定义取决于你想在json中显示哪些属性。例如,如果那些是你的属性,你可以用attributes :id, :title, :content
声明它。
额外评论
我注意到按照wiki页面中PaginationSerializer
继承自CollectionSerializer
的说明。这个序列化程序并不存在于我的AMS gem版本中,但事实证明它只是ArraySerializer
重命名。所以继承自ArraySerializer
为我工作。