【问题标题】:using different key for to_json :methods对 to_json 使用不同的键:方法
【发布时间】:2010-03-15 17:58:49
【问题描述】:

to_json 中使用:methods 时,有没有办法重命名密钥?我正在尝试用它的 base62 版本替换真实 ID,并且我希望 base62_id 的值具有键 :id

@obj.to_json(
    :except => :id
    :methods => :base62_id
)

我试过了

@obj.to_json(
    :except => :id
    :methods => { :id => :base62_id }
)

但这没有用。

有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails json


    【解决方案1】:

    to_json 序列化器使用方法名作为序列化的键。所以你不能为此使用methods 选项。 不幸的是to_json方法没有t acceptblock`参数,否则你可以做类似的事情

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

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 2016-12-28
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多