2012-10-18 67 views
0

我傳遞一些JSON跨越到一個視圖,像這樣:將ruby對象映射到json的正確(版本安全)方法是什麼?

@items = Item.where(:custom => false).map do |item| 
    "{'id': #{item.id}, 'label': '#{item.name}', 'category': '#{item.category}'}," 
end 
@items = "[#{@items}]" 

這在當地正常工作,與紅寶石1.8.7:

[{'id': 1, 'label': 'Ball', 'category', : 'Toy'},{'id': 2, 'label': 'Rat', 'category', : 'Live Rodent'}] 

然而,在部署到Heroku的(紅寶石1.9。 2我相信),可怕的事情發生了:

[["{'id': 1, 'label': 'Ball', 'category', : 'Toy'},", "{'id': 2, 'label': 'Rat', 'category', : 'Live Rodent'},"]]; 

我假設在紅寶石版本不同的是這個問題,但我也懷疑我的方法是最佳的。我該如何重寫這個版本才能在兩個版本上都能正常工作?

+1

從技術上講,你的JSON是無效的。鍵和字符串值必須根據規範雙引號。可能不是所有這些的根本原因,但值得注意的是。通常,您不應手動編寫JSON。請參閱下面的答案以獲得更好的解決方案 – Flambino

回答

2

這將在Ruby中1.8.7和1.9.2的工作:

@items = Item.where(:custom => false).map do |item| 
    {'id' => item.id, 'label' => item.name, 'category' => item.category} 
end 
@items = @items.to_json 

您的問題可能是由於到Ruby 1.9.2增加了另一種方式來定義哈希值,所以{鍵:值}是與{:key => value}相同。

相關問題