続 ActiveRecord::Baseのto_jsonメソッド
ActiveRecord::Baseのto_jsonメソッドが気にくわないというエントリを以前書いたが、つい最近Agile Web Developmentで紹介されていたJsonifierがいい感じ。
Jsonifier is a Rails plugin that adds options to the ActiveRecord#to_json method similar to ActiveRecord#to_xml. It's time to treat the JSON encoding of AR objects with more respect ;)
Jsonfier は ActiveRecord#to_xml に似た ActiveRecord#to_json メソッドにオプションを追加する Rails プラグインです。今こそ、AR オブジェクトの JSON へのエンコーディングにもっと尊敬を込めた取り扱いを行う時です^^;
このプラグインを導入することで、
属性の値が attributes でくるまれなくなる
例えば、
{attributes: {id: 1, name: "Konata"}}
って返ってた JSON 文字列が、
{id: 1, name: "Konata"}
って返るようになる。ってか "Konata" って^^;
他には、to_json メソッドにいくつかのオプションを渡せるようになる。
:only, :except
david.to_json(:only => :name) # {name: "David"} david.to_json(:only => [:id, :name]) # {id: 1, name: "David"} david.to_json(:except => :created_at) # {id: 1, name: "David", awesome: true} david.to_json(:except => [:id, :created_at]) # {name: "David", awesome: true}
これはそのまんまですな。
:method
david.to_json(:methods => :permalink) # {id: 1, name: "David", awesome: true, created_at: "07/01/2007", permalink => "1-David"} david.to_json(:methods => [:permalink, :interestingness]) # {id: 1, name: "David", awesome: true, created_at: "07/01/2007", \ permalink => "1-David", :interestingness => 666}
メソッドの返り値を含めるらしい。これは面白い。
:include
その AR オブジェクトの関連を含めるオプション。
david.to_json(:include => :posts) # {id: 1, name: "David", awesome: true, created_at: "07/01/2007", \ posts: [{id: 1, author_id: 1, title: "Welcome to the weblog"}, \ {id: 2, author_id: 1, title: "So I was thinking"}]}
感想
けどぶっちゃけ、:method オプション以外のオプションは ActiveRecord でオブジェクトをとってくる時に find のオプションで代用が効くと思うんだよな。