从我的Rails 3应用程序中我想要一个像这样的JSON: {数:10, 图片:[ {ID:1}, ...]} 我试过了
render( :json => { :count => 10, :pictures => @pictures.to_json(:only=>:id) } )
但在这种情况下,我的照片会被转义
..."pictures":"[{\"id\":2653299}, ....
在我的旧merb应用程序中,我的控制器中有以下简单的行:
display( { :count=>@count, :pictures => @pictures } )
因为我使用datamapper
作为我的ORM和dm-serializer
我不知道在哪里影响生成的json。
答案 0 :(得分:0)
尝试使用“原始”功能。默认情况下,Rails 3在视图中转义输出。尝试这样的事情:
raw render( :json => { :count => 10, :pictures => @pictures.to_json(:only=>:id) } )
或者有可能在渲染函数内逃避它(虽然,我从未尝试过这个):
render( :json => { :count => 10, :pictures => raw(@pictures.to_json(:only=>:id)) } )
答案 1 :(得分:0)
您的代码应为:
render( :json => {:count => 10, :pictures => @pictures })
没有在@pictures上显式调用to_json(与你的merb应用程序中的相同)。
但是,如果没有此提交,这将在dm-1.0中炸弹:http://github.com/datamapper/dm-serializer/commit/64464a03b6d8485fbced0a5d7150be90b6dcaf2a
我想它很快就会发布,但与此同时它很容易修补。
修改强>
我忽略了你想要使用的事实:only =>你收藏的[:id]。它看起来像:as_json由于某种原因尚未在集合中实现。你可以通过几种方式解决这个问题。您的示例可能如下所示:
render( :json => {:count => 10, :pictures => @pictures.map {|p| p.as_json(:only => [:id])}} )
这会将您的Picture集合转换为ID哈希。然后渲染将正确地执行它,你应该得到你想要的结果。 (希望)