Active Model Serializer и несколько мета-значений

Я смотрю README для Active Model Serializer и вижу этот пример:

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!" }
  ]
}

Я предполагаю, что мне нужно иметь два метаобъекта. Это возможно? Как бы я это сделал?


person timpone    schedule 29.08.2013    source источник


Ответы (1)


Нормальным решением было бы вложить сам ключ «сортировки» в ключ «мета» («мета» — это универсальное место для информации об ответе, которая не является моделью). Итак, вы бы использовали:

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!" }
  ]
}
person gmcnaughton    schedule 12.01.2016