http://rorwiki.hellopen.net/index.php?title=%E6%98%8E%E7%99%BDMigrations
ActiveRecordMigration允許你使用ruby去定義database schema的變化。
這有幾種用途,如下:
1.團(tuán)隊(duì)開發(fā)-如果一個(gè)人改變了schema,其他的開發(fā)人員需要更新的時(shí)候,只要
運(yùn)行“rake migrate”。
2.多臺機(jī)器-如果你在臺式機(jī)和筆記本電腦上開發(fā),或者在不同的地方開發(fā),migration
可以使你的開發(fā)保持同步。
如何使用migration
1.建立migration
運(yùn)行:
ruby script/generate migration add_a_new_table
它將建立一個(gè)文件:
db/migrate/001_add_a_new_table.rb
2.編輯代碼告訴它該做什么
class AddANewTable < ActiveRecord::Migration
??? def self.up
????? create_table :users do |table|
??????? table.column :name, :string
??????? table.column :login,? :string, :null => false
??????? # This column will contain an MD5 hash.
??????? table.column :password, :string, :limit => 32, :null => false
??????? table.column :email, :string
????? end
??? end
??? def self.down
????? drop_table :users
??? end
? end
?
當(dāng)migration新增一個(gè)版本,方法self.up將被執(zhí)行。
self.down在需要的時(shí)候用來回滾所有的改變。
類名需要和migration名稱相同,例如:db/migrate/001_add_a_new_table.rb
的類名為AddANewTable。
有效的字段類型:integer, float, datetime, date, timestamp, time, text,
????string, binary, and boolean。
????
設(shè)置字段參數(shù):
????limit ( :limit => “50” )
????default (:default => “blah” )
????null (:null => false implies NOT NULL)
????
3.運(yùn)行migration
rake migrate
它將建立一個(gè)“schema_info”表(如果數(shù)據(jù)庫不存在該表),這個(gè)表是用來跟蹤數(shù)據(jù)庫當(dāng)前
的版本。每個(gè)新的migration將是一個(gè)新的版本,每個(gè)新的migrations將被執(zhí)行直到你的數(shù)據(jù)庫
是最新的版本。
?
?