Как мне построить этот объект JSON в ruby? - PullRequest
1 голос
/ 29 июня 2010

Мне нужно вывести массив объектов ruby ​​в JSON. Мне нужно будет найти элемент в объекте 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 вопроса: Как я могу построить это в ruby? Есть ли лучший способ выполнить то, что я делаю?

Также просто обратите внимание, что я строю это на платформе Rails

Спасибо!

1 Ответ

10 голосов
/ 29 июня 2010

Предполагая, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...