2014-02-12 17 views
0

我需要在rails控制器中为activerecord对象提供JSON输出。基于由jpatokal答案this question,我试过如下: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 

它产生美化输出(所以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 console下尝试,并排除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。


编辑:我忘了提及这都可以在rails 4.1.8完成以上(甚至可能更早)使用标准jsonmulti-json宝石与轨项目包装。