1

我正在查看 Active Model Serializer 的 README 并查看以下示例:

render json: @posts, serializer: CustomArraySerializer, meta: {total: 10}, meta_key: 'meta_object'

...

{
  "meta_object": { "total": 10 },
  "posts": [
    { "title": "Post 1", "body": "Hello!" },
    { "title": "Post 2", "body": "Goodbye!" }
  ]
}

但我希望能够输出:

{
  "meta_object": { "total": 10 },
   "sort":[2,1],
  "posts": [
    { "title": "Post 1", "body": "Hello!" },
    { "title": "Post 2", "body": "Goodbye!" }
  ]
}

我猜我需要有两个元对象。这可能吗?我该怎么做?

4

1 回答 1

0

正常的解决方案是将“排序”键本身嵌套在“元”键下(“元”是非模型响应信息的全部位置)。所以你会使用:

render json: @posts, serializer: CustomArraySerializer, meta: { total: 10, sort: [2, 1] }, meta_key: 'meta_object'
...
{
  "meta_object": {
    "total": 10,
    "sort": [2, 1]
  },
  "posts": [
    { "title": "Post 1", "body": "Hello!" },
    { "title": "Post 2", "body": "Goodbye!" }
  ]
}

如果您的要求绝对需要“排序”键出现在根目录,您可以手动执行:

response_json = CustomArraySerializer.new(@posts).as_json.merge { sort: [2, 1] }
render json: response_json, meta: { total: 10 }, meta_key: 'meta_object'
...
{
  "meta_object": {
    "total": 10
  },
  "sort": [2, 1],
  "posts": [
    { "title": "Post 1", "body": "Hello!" },
    { "title": "Post 2", "body": "Goodbye!" }
  ]
}
于 2016-01-12T11:41:39.037 回答