ActiveRecord::Baseのto_jsonメソッド
ActiveRecord::Baseのto_jsonメソッドが気にくわない。
というかActiveRecord::Baseクラス自体にはto_jsonメソッドは定義されていないので、ActiveSupport中におけるObjectクラスに定義されているto_jsonメソッドがコールされるため、予想していたjsonと異なるjsonが返されてしまう。
例えば、
Account.find(1).to_json
とした場合は、
"{username: \"foo\", id: \"1\", password: \"bar\"}"
って返って欲しいのが人情だと思うんだよなあ。
"{attributes: {username: \"foo\", id: \"1\", password: \"bar\"}}"
けどこう返る。attributesでくるまなくて良いですよ!!!
気にくわないのでRailsにモンキーパッチを当ててみた。
module ActiveRecord class Base def to_json values = instance_values att = values.delete('attributes') do |key| {} end ActiveSupport::JSON.encode(att.update(values)) end end end
ひどいソースコードだけどちゃんと動いた。よしよし。