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
ひどいソースコードだけどちゃんと動いた。よしよし。