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

时间:2012-03-29 17:49:45

标签: jquery ruby-on-rails ruby-on-rails-3

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

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

 gon.note = @note.attributes

我可以输出其内容:

 alert(gon.note.content)

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

 alert(gon.note.tags)

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

如果您的@note.tagshas_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。