Rails:控制器中的JSON.pretty_generate(obj)不会产生漂亮的输出

时间:2014-02-12 00:13:00

标签: ruby-on-rails json ruby-on-rails-3.2

对于rails控制器中的activerecord对象,我需要一个漂亮的JSON输出。基于jpatokal对this question的回答,我尝试了以下内容:

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 

它确实产生了一个美化输出(所以pretty_generate正在工作,我的浏览器也是如此)。

如何使用pretty_generate生成activerecord对象的漂亮输出?

1 个答案:

答案 0 :(得分:5)

要从活动记录对象获得漂亮的JSON输出,您必须首先将对象请求为JSON。

record.as_json

以上代码将为您执行此操作,从控制器呈现漂亮JSON的简短方法是:

render json: JSON.pretty_generate(record.as_json)

这也解决了您尝试将AR对象转换为"only generation of JSON objects or arrays allowed" JSON时可能出现的pretty_generate错误。


编辑:我忘了提及这一切都可以在rails 4.1.8及以上(可能更早)使用标准的jsonmulti-json宝石进行与rails项目。