Вставка пользовательского ключа: пара значений в структуру JSON с пользовательским порядком с использованием jbuilder
В методе show для контроллера у меня есть настройка @object с запросом
@object = WorkOrder.find(params[:id])
Теперь шаблон show.json.jbuilder имеет следующий код:
json.extract! @object, :id, :note, :status, :created_at
json.store_name @object.store.display_name
и о / п,
{
"id": 31,
"note": "work_order for store A",
"status": "complete",
"created_at": "2015-11-26T11:16:53.000Z",
"store_name": "store name"
}
Теперь, как вставить пользовательский ключ "store_name" между "status" и "made_at"?
3 ответа
Решение
Если вы хотите, чтобы атрибуты были в определенном порядке, было бы лучше, если бы вы добавили их самостоятельно.
Файл Jbuilder:
json.id @object.id
json.note @object.note
json.status @object.status
json.display_name @object.store.display_name
json.created_at @object.created_at
Выход
{
"id": 31,
"note": "work_order for store A",
"status": "complete",
"display_name": "store name",
"created_at": "2015-11-26T11:16:53.000Z"
}
Я бы порекомендовал вам встраивать отношения. Это лучше масштабируется, если вы хотите добавить другие атрибуты Store
,
Пример:
Файл Jbuilder:
json.id @object.id
json.note @object.note
json.status @object.status
json.store do
json.name @object.store.display_name
end
json.created_at @object.created_at
Выход
{
"id": 31,
"note": "work_order for store A",
"status": "complete",
"store": {
"name": "store name"
},
"created_at": "2015-11-26T11:16:53.000Z"
}
Позже вы можете легко добавить атрибуты к Store
хеш, не нарушая интерфейс.
Вы также можете позволить Rails творить чудеса так:
render :json => @object, :include => {:store => {:only => :display_name}}
Я боюсь, что нет никакого способа принести store_name прийти в другую позицию. Вы должны быть довольны тем, что у вас есть.