如何在ruby中构建此JSON对象?

我需要在JSON中引入一组ruby对象。 我需要通过id在JSON对象中找到该项,所以我认为id最好是每个对象的键。 这个结构对我来说最有意义:

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

这样我就可以像console.log(json_obj[id].attr1)一样轻松调用json对象console.log(json_obj[id].attr1)

问题是我不太确定如何在ruby中构建它。 这是我得到的:

 # in ruby @book_types = [] BookType.all.each do |bt| @book_types < {:attr => bt.attr}} end @book_types = @book_types.to_json // In JS var bookTypes = JSON.parse(''); 

2个问题:我如何在ruby中构建它? 有没有更好的方法来完成我正在做的事情?

还要注意我在Rails框架上构建它

谢谢!

假设BookType是一个ActiveRecord类,您可以这样做:

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

…其中"attr1, attr2"是您要包含在JSON中的属性列表。

如果你想将id作为键,你可以这样做:

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