to_json / as_json覆盖

时间:2012-11-28 04:16:25

标签: ruby-on-rails ruby activerecord

我在我的ActiveRecord课程中凌驾于to_json:

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

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

我通过

来调用它
obj.to_json

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

{}
{}

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

1 个答案:

答案 0 :(得分:2)

Hash#merge返回合并后的哈希:

  

合并(other_hash)→new_hash
  合并(other_hash){| key,oldval,newval |阻止}→new_hash

     

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

所以你想要:

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

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

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