假设我有一个处理TODO列表的应用程序.该清单已完成和未完成的项目.现在我想向列表对象添加两个虚拟属性; 列表中已完成和未完成的项目数.我还需要在json输出中显示这些.
我的模型中有两个方法可以获取未完成/已完成的项目:
def unfinished_items
self.items.where("status = ?", false)
end
def finished_items
self.items.where("status = ?", true)
end
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能在json输出中得到这两个方法的计数?
我正在使用Rails 3.1
我有一个使用Ruby标准库中的Set类的数据结构.我希望能够将我的数据结构序列化为JSON字符串.
默认情况下,将序列化设置为数组:
>> s = Set.new [1,2,3]
>> s.to_json
=> "[1,2,3]"
Run Code Online (Sandbox Code Playgroud)
在尝试反序列化之前哪个是好的.
所以我定义了一个自定义to_json方法:
class Set
def to_json(*a)
{
"json_class" => self.class.name,
"data" => {
"elements" => self.to_a
}
}.to_json(*a)
end
def self.json_create(o)
new o["data"]["elements"]
end
end
Run Code Online (Sandbox Code Playgroud)
哪个效果很好:
>> s = Set.new [1,2,3]
>> s.to_json
=> "{\"data\":{\"elements\":[1,2,3]},\"json_class\":\"Set\"}"
Run Code Online (Sandbox Code Playgroud)
直到我把Set放入哈希或其他东西:
>> a = { 'set' => s }
>> a.to_json
=> "{\"set\":[1,2,3]}"
Run Code Online (Sandbox Code Playgroud)
知道为什么to_json当Set嵌套在另一个对象中时我的自定义不被调用?