J’ai une note et elle a un certain nombre d’atsortingbuts. Il a également des balises associées. J’utilise gon pour rendre cette variable disponible pour les fichiers javascript d’une page (rendant @ note.atsortingbutes disponible pour cette page)
Je peux facilement sortir les atsortingbuts de note, c’est-à-dire si j’instancie:
gon.note = @note.atsortingbutes
Je peux sortir son contenu:
alert(gon.note.content)
Mais cela ne fait pas passer les balises des notes. Je ne peux pas, par exemple, faire:
alert(gon.note.tags)
Que se passe-t-il si je souhaite afficher les balises d’une note, mais que je souhaite les faire passer avec gon.note plutôt que de créer une toute autre variable gon.tags? Comment pourrais-je faire cela (peut-être une sorte de jointure ou d’inclusion)? Je veux faire cela parce que c’est mieux pour, par exemple, si vous avez plusieurs notes affichées.
Si votre @note.tags
est une association has_many
(et non un simple tableau), gon ne sait pas comment sérialiser un tableau d’instances de Tag
.
Vous ne pouvez rien faire d’autre que d’introduire une autre variable:
# controller gon.note_tags = @note.tags.map &:atsortingbutes # JS var first_tag_name = gon.note_tags[0].name;
Vous voudrez peut-être utiliser Rabl si vous devez sérialiser trop d’objects AR, car gon prend en charge Rabl.
Rails a une méthode as_json utile qui vous permet de spécifier vos associations, les champs à inclure et même les méthodes à inclure. Il retourne un hachage ruby pour un seul object ou un tableau pour une collection, et il sera bien sérialisé lorsque gon appelle to_json.
gon.note = @note.as_json(:include => [:tags]))