为to_json:方法使用不同的键

fph*_*ipe 7 json ruby-on-rails

使用:methodsto_json,有没有办法重命名密钥?我正在尝试用它的base62版本替换真实的id,我希望base62_id得到密钥的值:id.

@obj.to_json(
    :except => :id
    :methods => :base62_id
)
Run Code Online (Sandbox Code Playgroud)

我试着这样做

@obj.to_json(
    :except => :id
    :methods => { :id => :base62_id }
)
Run Code Online (Sandbox Code Playgroud)

但那没用.

有什么建议?

Har*_*tty 2

序列化器to_json使用方法的名称作为序列化的键。所以你不能使用methods这个选项。不幸的是to_json方法不会t accept阻止`参数,否则你可以做类似的事情

@obj.to_json(:except => :id) {|json| json.id = base62_id }
Run Code Online (Sandbox Code Playgroud)

所以这给我们留下了一个丑陋的黑客,例如:

def to_json(options={})
  oid, self.id  = self.id, self.base62_id(self.id) 
  super
ensure
  self.id = oid
end
Run Code Online (Sandbox Code Playgroud)

现在to_json将返回预期的结果。