2014-02-12 2 views
0

Мне нужен хороший вывод JSON для объекта activerecord в контроллере rails. На основании ответа на this question по jpatokal, я попытался следующие:Rails: JSON.pretty_generate (obj) в контроллере не производит довольно вывода

respond_to do |format| 
    format.json { render :json => JSON.pretty_generate(record) } 
end 

где

record 

является объектом ActiveRecord. Он не производит удаленный выход. Однако, когда я пытаюсь выводить хэш, используя один и тот же код, а именно,

respond_to do |format| 
    format.json { render :json => JSON.pretty_generate({"abc" => "1", "def" => "2"}) } 
end 

это производит prettified выхода (так pretty_generate работают, и поэтому мой браузер).

Как использовать pretty_generate для создания довольно вывода объекта activerecord?

+0

Предполагая, что вы просто добавили 'gem install json' в свой Gemfile? – blotto

+0

Я этого не сделал. Тем не менее, он есть: $ gem list | grep "json" json (1.7.5) multi_json (1.3.6) – ppd

+0

мое предложение - попробовать в консоли rails next и исключить код format.json. в основном смотрите, если '> JSON.pretty_generate (record)' показывает символы \ n. – blotto

ответ

3

Чтобы получить хороший вывод JSON из активного объекта записи, вы должны сначала запросить объект как JSON.

record.as_json 

Приведенный выше код будет делать это для вас, короткий способ сделать из довольно JSON от контроллера:

render json: JSON.pretty_generate(record.as_json) 

Это также решает ошибку "only generation of JSON objects or arrays allowed" вы можете получить пытается преобразовать объекты AR до pretty_generate JSON.


EDIT: Я забыл упомянуть, это может быть сделано в rails 4.1.8 и выше (возможно, даже раньше), используя стандартные json и multi-json драгоценные камни упакованы с проектом рельсов.

Смежные вопросы