2013-08-29 1 views
1

Я смотрю на README для активной модели Serializer и посмотреть этот пример:Активная модель 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!" } 
    ] 
} 

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

ответ

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