我需要在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)
问题是我不太确定如何在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框架上构建它
谢谢!
答案 0 :(得分:10)
假设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