假设我有一个处理待办事项清单的应用程序。清单中已完成和未完成的项目。现在,我想向列表对象添加两个虚拟属性。列表中已完成和未完成项目的计数。我还需要将这些显示在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
to_json
通常,您希望to_json一个人呆着,因此您所要做的就是添加自己的as_json实现,如下所示:
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。
serializable_hash