0

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 の違いは何ですか?なぜこれが機能しないのですか? ありがとう!

4

1 に答える 1

2

Hash#mergeマージされたハッシュを返します:

merge(other_hash) → new_hash
merge(other_hash){|key, oldval, newval| ブロック} → new_hash

other_hashの内容とhshの内容を含む新しいハッシュを返します。

あなたが望んでいるのは:

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

またはmerge!、ハッシュをインプレースで変更する which を使用します。

options.merge! :methods => [:shortened_id, :quote]
于 2012-11-28T04:22:23.820 に答える