Migrationで初期データ作成

Migrationその1の続き Migrationで初期データの用意も出来ます。 開発時のユーザーデータとか、コードテーブルのようなマスタ定義を書いておくと、 複数人で開発するときに激しく便利。
$ ruby script/generate migrate insert_users
002_insert_usersというファイルが出来ているので、 テキストエディタで編集。
class InsertUsers < ActiveRecord::Migration
  def self.up
     User.create(:name=>"本田 忠勝"   , 
                 :password => "蜻蛉切り",
                 :birth => "1548-01-01",
                 :roll => "徳川四天王",
                 :time_stamp => Time.now
                 )
     User.create(:name=>"酒井忠次"   , 
                 :password => "東三河",
                 :birth => "1527-01-01",
                 :roll => "徳川四天王",
                 :time_stamp => Time.now
                 )
     User.create(:name=>"榊原康政"   , 
                 :password => "無",
                 :birth => "1548-01-01",
                 :roll => "徳川四天王",
                 :time_stamp => Time.now
                 )
     User.create(:name=>"井伊直政"   , 
                 :password => "赤備え",
                 :birth => "1561-01-01",
                 :roll => "徳川四天王",
                 :time_stamp => Time.now
                 )
  end
  def self.down
    @users = User.find_by_roll('徳川四天王')
    @ users.destroy
  end
end
すでにusersのmodelが出来ているはずなので、 User.createでレコードを生成出来ます。 self.downにはfind_by_XXXで検索してdestroyしてやれば良いでしょう。

Migrationで書き方あれこれ

初め迷ったのが、「Migrationで複数のテーブルを作る場合、一つのファイルに纏めるべきか?」と言う点です。 分けて書いても、一つに纏めても変わらないのですが、個人的には分けた方が良いと思います。 理由は単純でコードが見やすいからです。 例えば6テーブルMigrationで書いた場合、rake migrateした時にいきなりバージョンが6になるか1になるかの違いしかありませんし。 もう一つは、データはMigrationで用意すべきかfixtureで用意すべきか? どっちでもいい気がします。マスタデータの様なモノはMigrationで、それ以外はお好きなほうで。 YAMLのほうが編集はしやすいですが、本来はユニットテスト用なので、微妙な所です。 ターミナルからのfixtureのロードの仕方は・・・忘れたので後で書いておきます。