2010-06-29 28 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