早々に帰宅しサケを呑むんだがアレてはいかん

とゆー事で Ruby on Rails をいぢる。
ココ (task*pad.jp Imitation with Ruby on Rails) を参考にしつつ migration に着目しつつ動作確認したんですが、以下に migration に関する備忘録を。

Migration 定義内でデータ追加する場合には、先に model を作成

例えば上記サイトの例にて states テーブルを作成する Migration 定義を行ない、行を追加する場合には先に model を作成しておく必要あり。
こんな感じ

$ script/generate model state
(出力略)
$ script/generate migration create_state
(出力略)
$ emacs -nw db/002_create_state.rb
(略)
$ rake migration

んでねーと、例えば上記の 002_create_state.rb にて以下のようなコードがある場合、異常終了する。

    State.create :id => '0', :value => 'not yet'
    State.create :id => '1', :value => 'Done!'
    State.create :id => '2', :value => 'Ooups!'

ま、State クラスなんて作ってないんだから当たり前なんだが。

self.up に不具合がある場合、self.down が正常に動作しない

スミマセン。これはきちんと動作確認してませんが、少なくとも rake migrate が NG だったケースでは VERSION 指定しても drop_table (self.down 内に記述) が動作してませんでした。self.up に失敗した場合は、手動で self.down な処理 (テーブル削除やらカラムの追加 | 削除等) を実行してリトライの必要あり。

最初のバージョンに戻すには rake migrate VERSION=0

がしかし、scheme_info テーブルは残る。当たり前か。

最初に戻して rake migrate したら最新になる。

これは実験してみねーと何とも言えんのだが、migration も svn 管理なケースでは、svn up した後に rake migrate VERSION=0 した後に rake migrate した方が良いのだろーか。
ただ、試験用のデータをどーするのか、という話はあるのでも少しツッコンで試す必要あり。

しっかし便利だなぁ。java な O/R マッピングツールを試したコトがありますが、ココまで手軽ではなかった記憶あり。
# さ、酔わない内に寝よう。