如何在集合中对关联的属性进行分组(活动模型序列化程序)
How to group Associations' attributes in a Collection (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'}
]
}
您似乎想模仿 jsonapi 包含的关系。所以,w json 适配器,post 有一个属性,为了简单起见,author_id,然后,你将 post 集合与作者分开渲染并生成响应,或者您将它们混合并减少它们。您也许可以只呈现为 [posts, authors]!
作为解决方法,我们创建了一个自定义适配器,扩展了 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
考虑以下两个实体:帖子、作者
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'}
]
}
您似乎想模仿 jsonapi 包含的关系。所以,w json 适配器,post 有一个属性,为了简单起见,author_id,然后,你将 post 集合与作者分开渲染并生成响应,或者您将它们混合并减少它们。您也许可以只呈现为 [posts, authors]!
作为解决方法,我们创建了一个自定义适配器,扩展了 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