Rails 2.1のto_json
Railsでは、to_jsonというメソッドでJSON形式の文字列を生成できます。Ext.jsを使ってみようと思ってを試していたのですが、Rialsレシピブックとちょっと違うと思ったら、2.1から生成されるデータがちょっと変わってました。例えばtitleとauthorというフィールドがあるBookというActiveRecord::Baseを継承したモデルオブジェクトをJSONにすると、
# Bookオブジェクト Book.find(:first).to_json(:only => [:id, :title]) # 配列 Book.find(:all).to_json(:only => [:id, :title])
で得られるJSON形式の文字列は、
// Rails 2.0は // オブジェクト { id: 1 ,title: Agile Web Development with Rails } // 配列 [ { id: 1 , title: Agile Web Development with Rails } ,{ id: 2 , title: Rialsレシピブック } ] // Rails 2.1だと // オブジェクト { book: { id: 1 , title: Agile Web Development with Rails } } //配列 [ { book: { id: 1 , title: Agile Web Development with Rails } } ,{ book: { id: 2 , title: Rialsレシピブック } } ]
ということになるようです。2.1からは、"book"というクラス名をキーにしたハッシュの配列?になってます。
Book.find(:first).attributes.to_json
のようにすれば、単一オブジェクトの場合には2.0までのようなJSONを生成することができるようです。