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のロードの仕方は・・・忘れたので後で書いておきます。
コメント