2010-06-29 29 views
1

我需要在JSON中引入一個ruby對象數組。我將需要通過id找到JSON對象中的項目,所以我認爲最好是id是每個對象的關鍵。這種結構是很有道理的對我說:如何在ruby中構建這個JSON對象?

{ 
    "1": {"attr1": "val1", "attr2": "val2"}, 
    "2": {"attr1": "val1", "attr2": "val2"}, 
    "3": {"attr1": "val1", "attr2": "val2"} 
} 

這樣我可以很容易地調用到JSON對象像console.log(json_obj[id].attr1)

的問題是,我不是很清楚如何在Ruby中建立這個。這是我得到的:

# in ruby 
@book_types = [] 
BookType.all.each do |bt| 
    @book_types << {bt.id => {:attr => bt.attr}} 
end 
@book_types = @book_types.to_json 

// In JS 
var bookTypes = JSON.parse('<%=raw @book_types %>'); 

2問題:我該如何在紅寶石中構建它?有沒有更好的方式來完成我正在做的事情?

也只是一個說明,我正在建設這個Rails框架

謝謝!

回答

10

假設的BookType是一個ActiveRecord類,你可以這樣做:

BookType.all(:select => "attr1, attr2").to_json 

...其中"attr1, attr2"是要在JSON包括的屬性列表。

如果你想在id S作爲密鑰,你可以這樣做,而不是:

BookType.all.inject({}) { |hsh, bt| 
    hsh[bt.id] = { "attr1" => bt.attr1, "attr2" => bt.attr2 } 
    hsh 
}.to_json