gpt4 book ai didi

ruby-on-rails - 将虚拟属性添加到 json 输出

转载 作者:IT老高 更新时间:2023-10-28 12:44:19 25 4
gpt4 key购买 nike

假设我有一个处理 TODO 列表的应用。该列表包含已完成和未完成的项目。现在我想向列表对象添加两个虚拟属性;列表中已完成和未完成项目的计数。我还需要将这些显示在 json 输出中。

我的模型中有两种方法可以获取未完成/已完成的项目:

def unfinished_items 
self.items.where("status = ?", false)
end

def finished_items
self.items.where("status = ?", true)
end

那么,如何在我的 json 输出中获取这两种方法的计数?

我正在使用 Rails 3.1

最佳答案

Rails中对象的序列化有两个步骤:

  • 首先调用as_json将对象转化为简化的Hash。
  • 然后,在as_json返回值上调用to_json,得到最终的JSON字符串。

您通常希望单独留下 to_json,因此您只需添加 your own as_json implementation有点像这样:

def as_json(options = { })
# just in case someone says as_json(nil) and bypasses
# our default...
super((options || { }).merge({
:methods => [:finished_items, :unfinished_items]
}))
end

你也可以这样做:

def as_json(options = { })
h = super(options)
h[:finished] = finished_items
h[:unfinished] = unfinished_items
h
end

如果您想为方法支持的值使用不同的名称。

如果您关心 XML 和 JSON,请查看 serializable_hash .

关于ruby-on-rails - 将虚拟属性添加到 json 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com