Вставка пользовательского ключа: пара значений в структуру 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 прийти в другую позицию. Вы должны быть довольны тем, что у вас есть.

Другие вопросы по тегам