假设我有一个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/

10-10 02:46