javascript - 如何自定义rails3中的to_json方法?

标签 javascript json ruby-on-rails-3

我想将一个 Place 对象数组转换为 json,我一直这样做:

var places = <%= @places.to_json.html_safe %>;

唯一的问题是@places 数组中的每个位置都有一个未包含的关联标签列表。我正在使用 acts_as_taggable_on gem 来处理标签,因此要获取某个地方的标签列表,我需要说 place.tag_list。

我需要做什么才能为 javascript 数组中的每个位置包含 tag_list?我想我需要编写自己的 to_json 方法,但我不知道该怎么做。

编辑

事实证明,这比我想象的要容易。我可以这样说:

var places = <%= @places.to_json(:include => :tags).html_safe %>

唯一的问题是,这包含了比我真正需要的更多的关于每个标签的信息。每个标签都有一个 id 和名称,我真正想要的只是一个包含标签名称的列表。

最佳答案

to_json 方法还接受名为 methods 的参数。此参数允许您指定应调用并包含在对象的 json 表示中的方法。由于您提到您有一个名为 tag_list 的方法,您可以这样做:

var places = <%= @places.to_json(:methods => :tag_list).html_safe %>

如果出于某种原因,您没有生成标签名称的方法,但每个标签都有一个方法来为您提供其名称,您可以在 Place 模型中添加一个方法来生成一个标签名称列表,如下所示:

def tag_names
    tags.collect do |tag|
        tag.name
    end
end

然后你可以像这样用 tag_names 得到你的地方 json:

place_json = @places.to_json(:methods => :tag_names)

此技术适用于您想要添加到模型的 json 表示中的任何计算属性。

关于javascript - 如何自定义rails3中的to_json方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703509/

相关文章:

mysql - 包含 Rails 3 上的外部左连接

javascript - jQuery mCustomScrollbar 更新错误

javascript - 将 php 值传递给 on click (getFunction(this.value)) 问题

javascript - 如何降低圈复杂度以使代码可以被 Sonar 接受

javascript - 是否有 HTML 表单的标准表示?

ruby-on-rails - 运行 rake 任务时如何跳过 Rails 初始值设定项的加载?

javascript - 过滤数组并减少

json - Golang 编码/json 编码添加 null

php - 本地主机不工作,但网站在 Android 中工作

ruby-on-rails - 冗余嵌套重复运算符