我需要在 JSON 中引入一组 ruby 对象。我将需要通过 id 在 JSON 对象中找到项目,所以我认为最好是 id 是每个对象的键。这种结构对我来说最有意义:
{
"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 个问题:如何用 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
我是一名优秀的程序员,十分优秀!