Comment inclure des objects associés à l’aide de gon dans Rails / jQuery

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]))