2012-11-28 73 views
0

我重寫to_json在我的ActiveRecord類:to_json/as_json覆蓋

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

它不會做任何的選項哈希,即它不改變它。

我通過

obj.to_json 

我打電話叫放它,看看它是否修改選項哈希和它打印

{} 
{} 

而且,我想這與as_json,沒有運氣。 to_json和as_json之間有什麼區別,爲什麼這不起作用? 謝謝!

+0

什麼''合併? – oldergod

回答

2

Hash#merge返回合併後的哈希:

合併(other_hash)→new_hash
合併(other_hash){|鍵,OLDVAL,的newval |塊}→new_hash

返回包含的 other_hash內容和HSH的內容的新的哈希。

所以,你想:

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

或使用merge!這改變了哈希就地:

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

謝謝!我會接受你的答案,如果你可以回答我的最後一個問題'to_json和as_json之間有什麼區別' – 0xSina

+1

@ 0xSina:'as_json'是一個pre-JSON序列化器,它產生一個簡單的嵌套Array/Hash/...結構,to_json '產生實際的JSON字符串,我前面介紹了一些在這裏http://stackoverflow.com/a/6880638/479863 –

+0

謝謝,將檢查出來! – 0xSina