如何在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]))