在:methods
中使用to_json
时,有没有办法重命名密钥?我正在尝试用它的base62版本替换真实的id,我希望base62_id
的值具有键:id
。
@obj.to_json(
:except => :id
:methods => :base62_id
)
我试着做
@obj.to_json(
:except => :id
:methods => { :id => :base62_id }
)
但这没效果。
有什么建议吗?
答案 0 :(得分:2)
to_json
序列化程序使用方法的名称作为序列化的键。因此,您无法使用methods
选项。
不幸的是to_json
方法没有t accept
阻止`参数,否则你可能会做类似的事情
@obj.to_json(:except => :id) {|json| json.id = base62_id }
所以这给我们留下了一个丑陋的黑客,例如:
def to_json(options={})
oid, self.id = self.id, self.base62_id(self.id)
super
ensure
self.id = oid
end
现在to_json
将返回预期结果。