Rails3:控制生成的JSON(使用datamapper ORM生成JSON)

Rails3:控制生成的JSON(使用datamapper ORM生成JSON),json,ruby-on-rails-3,datamapper,Json,Ruby On Rails 3,Datamapper,从我的Rails 3应用程序中,我想要一个JSON,如下所示: {计数:10, 图片:[ {id:1}, ... ] } 我试过了 但在这种情况下,我的照片被漏掉了 ..."pictures":"[{\"id\":2653299}, .... 在我的旧merb应用程序中,我的控制器中有以下简单的一行: display( { :count=>@count, :pictures => @pictures } ) 因为我使用datamapper作为我的ORM和dm序列化程序,

从我的Rails 3应用程序中,我想要一个JSON,如下所示: {计数:10, 图片:[ {id:1}, ... ] } 我试过了

但在这种情况下,我的照片被漏掉了

..."pictures":"[{\"id\":2653299}, ....
在我的旧merb应用程序中,我的控制器中有以下简单的一行:

    display( { :count=>@count, :pictures => @pictures } ) 
因为我使用
datamapper
作为我的ORM和
dm序列化程序
,所以我不确定在哪里影响生成的json。

尝试使用“raw”函数。默认情况下,Rails 3在视图中转义输出。试着这样做:

raw render( :json => { :count => 10, :pictures => @pictures.to_json(:only=>:id) } )
render( :json => {:count => 10, :pictures => @pictures.map {|p| p.as_json(:only => [:id])}} )
或者可以在渲染函数中转义它(尽管我从未尝试过):

您的代码应该是:

render( :json => {:count => 10, :pictures => @pictures })
不调用:在@pictures上显式调用json(与您的merb应用程序中相同)

但是,如果没有此提交,这将在dm-1.0中爆炸:

我想它很快就会发布,但在此期间,它很容易修补

编辑

我忽略了一个事实,即您希望在集合中使用:only=>[:id]。看起来:无论出于什么原因,都没有在集合上实现as_json。你可以用几种方法来解决这个问题。您的示例可能如下所示:

raw render( :json => { :count => 10, :pictures => @pictures.to_json(:only=>:id) } )
render( :json => {:count => 10, :pictures => @pictures.map {|p| p.as_json(:only => [:id])}} )

这将把你的图片集变成一堆ID。渲染将正确地进行渲染,您应该会得到所需的结果。(希望如此)

我明白了。因此,datamapper负责进行序列化,而不是某些花哨的ActiveModel模块。我将在周末试一试。谢谢。即使在一些include-ActionView::Helpers::rawOutputhHelper操作失败后,输出仍然会被转义。