假设我有一个User
模型和一个序列化器UserSerializer < ActiveModel::Serializer
,以及一个看起来像这样的 Controller :
class UsersController < ApplicationController
respond_to :json
def index
respond_with User.all
end
end
现在,如果我访问
/users
,我将得到一个类似于以下内容的JSON响应:{
"users": [
{
"id": 7,
"name": "George"
},
{
"id": 8,
"name": "Dave"
}
.
.
.
]
}
但是,如果我想在JSON响应中包括一些与任何特定用户都不相关的额外信息,该怎么办?例如。:
{
"time": "2014-01-06 16:52 GMT",
"url": "http://www.example.com",
"noOfUsers": 2,
"users": [
{
"id": 7,
"name": "George"
},
{
"id": 8,
"name": "Dave"
}
.
.
.
]
}
这个示例是人为设计的,但是与我想要实现的效果非常相似。有源模型序列化器是否可能? (也许通过子类化
ActiveModel::ArraySerializer
?我无法弄清楚)。如何添加额外的根元素? 最佳答案
您可以将它们作为对response_with的第二个论点
def index
respond_with User.all, meta: {time: "2014-01-06 16:52 GMT",url: "http://www.example.com", noOfUsers: 2}
end
在0.9.3版本的初始化器中,设置
ActiveModel::Serializer.root = true
:ActiveSupport.on_load(:active_model_serializers) do
# Disable for all serializers (except ArraySerializer)
ActiveModel::Serializer.root = true
end
在 Controller 中
render json: @user, meta: { total: 10 }
关于ruby-on-rails - 事件模型序列化器: Adding extra information outside root in ArraySerializer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20947266/