読者です 読者をやめる 読者になる 読者になる

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を生成することができるようです。