【问题标题】:to_json/as_json overridingto_json/as_json 覆盖
【发布时间】:2012-11-15 20:54:47
【问题描述】:

我在 ActiveRecord 类中覆盖 to_json:

def to_json(options={})
    puts options
    options.merge :methods => [:shortened_id, :quote]
    puts options
    super(options)
end

它没有对选项哈希做任何事情,即它没有改变它。

我是通过

obj.to_json

我调用 puts 来查看它是否正在修改选项哈希并打印出来

{}
{}

另外,我用 as_json 试过这个,没有运气。 to_json 和 as_json 有什么区别,为什么这不起作用? 谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    Hash#merge 返回合并后的 Hash:

    merge(other_hash) → new_hash
    merge(other_hash){|key, oldval, newval|块} → new_hash

    返回一个包含 other_hash 内容和 hsh 内容的新哈希。

    所以你想要:

    options = options.merge :methods => [:shortened_id, :quote]
    

    或使用merge!就地修改哈希:

    options.merge! :methods => [:shortened_id, :quote]
    

    【讨论】:

    • 谢谢!如果你能回答我最后一个问题'to_json 和 as_json 有什么区别',我会接受你的回答
    • @0xSina: as_json 是一个 pre-JSON 序列化器,它产生一个简单的嵌套 Array/Hash/... 结构,to_json 产生实际的 JSON 字符串,我前段时间介绍了一些这里stackoverflow.com/a/6880638/479863
    • 谢谢,去看看!
    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 2011-12-02
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2011-07-08
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多