j'ai un modèle comme celui-cirails to_json un comportement inattendu pour include_root_in_json
class Parent < ActiveRecord::Base
:has_many :kids
end
class Kid < ActiveRecord::Base
:has_many :grandkids
:belongs_to :parent
end
je peux générer JSON comme ceci:
the_parent.to_json(:methods => [:kids])
=>{ "parent": { "enfants": [ {"kid": {"name" => "kid0" .... et ainsi de suite. Juste ce que je veux. Chaque objet ressemble à un hachage avec une seule clé - qui est le nom du modèle - et la valeur est un hachage d'attribut. Génial.
Mais je reçois des ennuis lorsque je tente de sérialiser l'arbre entier, comme ceci:
the_parent.to_json(:include => { :kids => { :include => :grandkids } })
=>{ "parent": { "enfants": [{ "name" => « kid0 " ... qui manque les noms de modèles dans le tableau" enfants ". La même chose arrive au niveau suivant avec les petits-enfants. Je vais analyser cela ailleurs, et cela aiderait à avoir une certitude sur le nom de l'objet (au lieu de s'appuyer sur la convention en utilisant le nom de la relation). Les docs annoncent ceci:
ActiveRecord::Base.include_root_in_json = true
qui je l'ai trouvé aucun effet. Ma conjecture est que le comportement différent a quelque chose à voir avec la différence entre la méthode: et les options d'inclusion, mais je ne peux pas bidouiller la syntaxe: pour obtenir l'imbrication dont j'ai besoin, et je ne suis pas sûr que cela fonctionne si elle compile.
Des idées? Merci, Dan
, je fais l'appel to_json dans le contexte d'un rendu: format. json {render: json => the_parent.to_json ... – danh
Je suis sûr qu'il y a une meilleure réponse, mais comme solution de contournement, je surcharge to_json dans mon modèle comme ceci: def to_json (args) super (: methods => [: kids]) end – danh