2010-09-18 56 views
3

從我的Rails應用程序3,我想這樣的JSON: {數:10, 圖片:[{ ID:1}, ...] } 我試圖Rails3中:以控制生成的JSON(to_json與DataMapper的ORM)

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

你的代碼應該是:

render(:json => {:count => 10, :pictures => @pictures }) 

沒有調用:to_json明確地在@pictures上(就像它在你的merb應用程序中一樣)。

然而,這將在DM-1.0炸彈沒有這個承諾:http://github.com/datamapper/dm-serializer/commit/64464a03b6d8485fbced0a5d7150be90b6dcaf2a

我想它會很快被釋放,但同時它的簡單修補。

編輯

我忽略了你想使用的事實:僅=> [:ID]在您的收藏。它看起來像:as_json尚未在集合上實現,無論出於何種原因。你可以通過幾種方式解決這個問題。您的示例可能如下所示:

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

這會將您的圖片集合變爲ID的哈希值。然後渲染將正確執行它的勝利,你應該得到你想要的結果。 (希望)

+0

我明白了。所以datamapper負責完成序列化,而不是一些花哨的ActiveModel-Module。我會在週末嘗試一下。謝謝。 – DeSchleib 2010-09-22 16:40:09

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)) }) 
+0

即使在一些包括ActionView :: Helpers :: RawOutputHelper這不起作用,輸出仍然會被轉義。 – DeSchleib 2010-09-23 17:22:35

相關問題