rakeでmigration

最近の rails はテーブルの作成は、rake の migration というのを使うらしい。
http://www.atmarkit.co.jp/im/carc/serial/proto04/proto04.html
(↑この記事は細かいところが結構間違っている。。)
RakeはRuby Make、つまり、Ruby版のビルドツールで、それを使って ActiveRecord::Migration を利用する。

使い方

ひな形を作って、それを編集する。
以下の例では、membersテーブルを作成するテンプレートを生成。

 $ ./script/generate migration create_members

これを実行すると、以下のような db/migrate/001_create_members.rb ができる。

class CreateMembers < ActiveRecord::Migration
  def self.up
  end

  def self.down
  end
end

このひな型はバージョン管理されていて、ひな形を作るごとに、頭の001が002、003、、と増えていく。self.up には以前のバージョンからの追加分を定義し、self.down には以前のバージョンに戻すときの変更分を定義する。今回は初回なので、まずは create の定義だけでOK。(正確に言うとdownにはdropを定義するんだろうか。。。?)
以下、テーブル作成定義を追加したもの。

class CreateMembers < ActiveRecord::Migration
    def self.up
        create_table :members do |t|
            t.column :id, :integer
            t.column :name, :string
        end
    end

    def self.down
    end
end

編集したら、rakeを使って変更を反映。

$ rake db:migrate

変更を確認。(SQLiteの場合)

$ sqlite3 db/development.sqlite3
sqlite> .schema
CREATE TABLE members (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
  "name" varchar(255) DEFAULT NULL);
CREATE TABLE schema_info (version integer);
sqlite> .quit

membersテーブルが作成されていることがわかる。(注:上記例は見やすいように改行してある。)