Полезная нагрузка JSON от Heroku - PullRequest
0 голосов
/ 15 октября 2011

Когда я получаю полезную нагрузку JSON с моего сайта Rails heroku (это простой простой тестовый сайт, созданный с помощью команды generate scaffold), я получаю что-то вроде этого:

[
{"client":
    {"name":"Fred Flintstone",
    "id":3,
    "room":"333",
    },
{"client":
    {"name":"Wilma Flintstone",
    "id":4,
    "room":"334",
    }
}

]

Мне бы очень хотелось получить что-то более совместимое с KVC, например:

{"clients":
[
{"client":
    {"name":"Fred Flintstone",
    "id":3,
    "room":"333",
    },
{"client":
    {"name":"Wilma Flintstone",
    "id":4,
    "room":"334",
    }
}
]

}

Кто-нибудь знает, как это сделать? Есть ли какой-нибудь код на стороне Ruby или на стороне Heroku, который даст мне этот формат?

Kurt

1 Ответ

1 голос
/ 15 октября 2011

В контроллере вместо

render :json => @clients

сделать

render :json => {@clients.first.class.name.underscore.pluralize => @clients}

или

render :json => {@clients.first.class.table_name => @clients}

Это не имеет никакого отношения к героку.

Вы можете включить / выключить, будет ли полученный объект иметь имя объекта в качестве ключа верхнего уровня, используя:

ActiveRecord::Base.include_root_in_json = true

Но, насколько я знаю, нет никакой опции конфигурации, чтобы делать то, что вы предлагаете.

См. http://apidock.com/rails/ActiveRecord/Serialization/to_json

Другой вариант, если вы хотите сделать это более чем в одном контроллере, это перенести это поведение на помощника и использовать его. Представленная выше логика будет работать независимо от рассматриваемой модели.

есть:

def kvcize(array)
  {array.first.class.table_name => array}
end

тогда

render :json => kvcize(@clients)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...