Je dois apporter un tableau d'objets ruby en JSON. J'aurai besoin de trouver l'élément dans l'objet JSON par identifiant. Je pense donc qu'il est préférable que l'identifiant soit la clé de chaque objet. Cette structure a le plus de sens pour moi:
{
"1": {"attr1": "val1", "attr2": "val2"},
"2": {"attr1": "val1", "attr2": "val2"},
"3": {"attr1": "val1", "attr2": "val2"}
}
De cette façon, je peux facilement appeler l'objet json comme console.log(json_obj[id].attr1)
Le problème est que je ne sais pas trop comment construire cela en rubis. C'est pour autant que j'ai eu:
# 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 questions: Comment puis-je construire cela en rubis? Y a-t-il une meilleure façon d'accomplir ce que je fais?
Aussi juste une note que je construis cela sur le cadre de Rails
Merci!
Réponses:
10 pour la réponse № 1En supposant que BookType soit une classe ActiveRecord, vous pouvez simplement faire ceci:
BookType.all(:select => "attr1, attr2").to_json
...où "attr1, attr2"
est une liste des attributs que vous souhaitez inclure dans votre JSON.
Si tu veux le id
s comme touches, vous pouvez le faire à la place:
BookType.all.inject({}) { |hsh, bt|
hsh[bt.id] = { "attr1" => bt.attr1, "attr2" => bt.attr2 }
hsh
}.to_json