我的数据库中存在User
模型,但是我想返回active_model_serializers
gem的json响应,其中user
属性被封装/嵌套在player
命名空间中,而该命名空间在db中不存在(例如是虚拟的,这是任意预期的响应)。
而不是:
{
"email": "[email protected]",
"first_name": "Hey",
"last_name": "Hoo",
"birthdate": "1540-05-05",
"phone_number": "856539571"
}
我想拥有:
{
"player":
{
"email": "[email protected]",
"first_name": "Hey",
"last_name": "Hoo",
"birthdate": "1540-05-05",
"phone_number": "856539571"
}
}
在UserSerializer类中,定义根属性。例如:
class UserSerializer < ActiveModel::Serializer
root :player
...
end
当Nwocha的答案正确时,我会在上面添加更多详细信息。
覆盖资源根仅在使用JSON适配器时适用。
通常,资源根源于要序列化的资源的类名。例如UserPostSerializer.new(UserPost.new)
将根据适配器集合复数规则以根user_post
或user_posts
进行序列化。
[在初始化程序(ActiveModelSerializers.config.adapter = :json
)中使用JSON适配器,或在渲染调用中传递适配器时,可以通过将根作为参数传递给render来指定根。例如:
render json: @user_post, root: "admin_post", adapter: :json
这将呈现为:
{
"admin_post": {
"title": "how to do open source"
}
}
Note:属性适配器(默认)不包括资源根。如果使用:json_api适配器,您也将无法创建单个顶级根。