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

Ton*_*ony 1 ruby json ruby-on-rails

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

{
    "1":   {"attr1": "val1", "attr2": "val2"},
    "2":   {"attr1": "val1", "attr2": "val2"},
    "3":   {"attr1": "val1", "attr2": "val2"}
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以很容易地调用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 %>');
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Jor*_*ing 10

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

BookType.all(:select => "attr1, attr2").to_json
Run Code Online (Sandbox Code Playgroud)

... ... "attr1, attr2"您希望包含在JSON中的属性列表.

如果你想要ids作为键,你可以这样做:

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