如何在Rails / jQuery中使用gon包含关联对象

我有一个注释,它有一定数量的属性。 它还有相关的标签。 我一直在使用gon使这个变量可用于页面的javascript文件(使@ note.attributes可用于此页面)。

我可以轻松输出音符属性,即如果我实例化:

gon.note = @note.attributes 

我可以输出它的内容:

  alert(gon.note.content) 

但是,这并没有把笔记的标签通过..例如,我做不到:

  alert(gon.note.tags) 

如果我想显示一个音符的标签怎么办,但是我想用gon.note来完成它而不是制作一个完整的其他变量gon.tags。 我怎么能这样做(也许是某种联接或包含)? 我想这样做是因为它比较好,例如,如果你有多个音符显示。

如果你的@note.tags是一个has_many关联(不是一个简单的数组), gon不知道如何序列化一个Tag实例数组。

除了引入另一个变量,你什么都不做:

 # controller gon.note_tags = @note.tags.map &:attributes # JS var first_tag_name = gon.note_tags[0].name; 

如果你需要序列化太多的AR对象,你可能想要使用Rabl ,因为gon支持Rabl。

Rails有一个有用的as_json方法,它允许您指定关联,要包括的字段,甚至包括的方法。 它返回单个对象的ruby哈希或集合的数组,当gon调用to_json时,这将很好地序列化。

 gon.note = @note.as_json(:include => [:tags]))