我正在使用Sinatra开发一个小应用程序。到目前为止这么好,但我有一个非常小的问题,我不明白为什么会发生这种情况。
我有一个带有自定义to_json的类Note:
class Note < ActiveRecord::Base
#id
#name
#body
#created_at
#updated_at
def to_json(options={})
{ 'id' => self.id,
'name' => self.name,
'body' => self.body,
}.to_json
end
end
如果我打电话:
Note.first.to_json
它返回:
=> "{\"id\":1,\"name\":\"this is the name\",\"body\":\"this is the body\"}"
如果我在数组中添加对象并调用该数组的to_json
array = Array.new
array.push Note.first
array.to_json
它返回:
=> "[{\"id\":1,\"name\":\"this is the name\",\"body\":\"this is the body\",\"updated_at\":\"2014-01-17T22:00:45-03:00\",\"created_at\":\"2013-04-17T21:21:20-03:00\"}]"
所以来自班级Note
的to_json没有被调用,因为我仍然得到updated_at
和created_at
我做错了什么? (顺便说一句,我正在使用json gem)
感谢。
答案 0 :(得分:3)
将您的to_json
方法重命名为as_json
,删除散列上的.to_json
,它应该有效。
def as_json(options={})
{
'id' => self.id,
'name' => self.name,
'body' => self.body,
}
end
答案 1 :(得分:0)
您可以在将记录添加到阵列之前序列化记录:
array = []
array << Note.first.to_json
array.to_json