为to_json:方法使用不同的键

时间:2010-03-15 17:58:50

标签: ruby-on-rails json

: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 }
)

但这没效果。

有什么建议吗?

1 个答案:

答案 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将返回预期结果。