Rails遷移允許您使用Ruby定義對資料庫模式的更改,從而可以使用版本控制系統使事情與實際代碼保持同步。
這有很多用途,包括&負;
開發團隊−如果一個人更改了模式,其他開發人員只需更新並運行「rake migrate」。
當您推出新版本以使資料庫也保持最新時,生產伺服器−運行「rake migrate」。
多台機器−如果您同時在台式機和筆記本電腦上開發,或者在多個位置開發,遷移可以幫助您使它們保持同步。
What Can Rails Migration Do?
- create_table(name, options)
- drop_table(name)
- rename_table(old_name, new_name)
- add_column(table_name, column_name, type, options)
- rename_column(table_name, column_name, new_column_name)
- change_column(table_name, column_name, type, options)
- remove_column(table_name, column_name)
- add_index(table_name, column_name, index_type)
- remove_index(table_name, column_name)
遷移支持所有基本數據類型−以下是遷移支持的數據類型列表−
字符串−用於小數據類型,如標題。
文本−用於較長的文本數據片段,如說明。
所有數字的整數&minus。
浮點數−表示小數。
日期時間和時間戳−將日期和時間存儲到列中。
日期和時間−只存儲日期或時間。
二進位−用於存儲圖像、音頻或電影等數據。
用於存儲真值或假值的布爾值。
有效列選項是−以下是有效列選項的列表。
限制(:limit=>>%35;8220;50&\3521;)
默認值(:default=>“blah”)
null(:null=>false表示不爲null)
注意−Rails遷移完成的活動可以使用任何前端GUI完成,也可以直接在SQL提示符下完成,但是Rails遷移使所有這些活動都非常容易。
有關這些的詳細信息,請參見Rails api。
Create the Migrations
下面是創建遷移的通用語法−
application_dir> rails generate migration table_name
這將創建文件db/migrate/001_table_name.rb。遷移文件包含描述資料庫表的數據結構的基本Ruby語法。
注意:在運行遷移生成器之前,建議清除模型生成器生成的現有遷移。
我們將創建與三個表對應的兩個遷移−書籍和主題。
圖書遷移應按以下方式進行&負;
tp> cd library library> rails generate migration books
上面的命令生成以下代碼。
主題遷移應如下所示;
tp> cd library library> rails generate migration subjects
上面的命令生成以下代碼。
注意,在創建遷移時,您對book和subject以及複數形式使用小寫。這是一個Rails範例,每次創建遷移時都應該遵循它。
Edit the Code
轉到應用程式的db/migrate子目錄,使用任何簡單的文本編輯器逐個編輯每個文件。
修改001_books.rb如下&減號;
ID列將自動創建,所以不要在這裡也這樣做。
class Books < ActiveRecord::Migration def self.up create_table :books do |t| t.column :title, :string, :limit => 32, :null => false t.column :price, :float t.column :subject_id, :integer t.column :description, :text t.column :created_at, :timestamp end end def self.down drop_table :books end end
當遷移到新版本時,使用方法self.up,如果需要,使用方法self.down回滾任何更改。此時,上面的腳本將用於創建books表。
修改002_subjects.rb如下&負;
class Subjects < ActiveRecord::Migration def self.up create_table :subjects do |t| t.column :name, :string end Subject.create :name => "Physics" Subject.create :name => "Mathematics" Subject.create :name => "Chemistry" Subject.create :name => "Psychology" Subject.create :name => "Geography" end def self.down drop_table :subjects end end
上面的腳本將用於創建subjects表,並將在subjects表中創建五條記錄。
Run the Migration
現在您已經創建了所有必需的遷移文件。現在是對資料庫執行它們的時候了。爲此,請轉到命令提示符並轉到應用程式所在的庫目錄,然後按以下方式鍵入rake migrate−
library> rake db:migrate
這將創建一個「schema_info」表(如果該表不存在),用於跟蹤資料庫的當前版本-每個新遷移都將是一個新版本,並且任何新遷移都將運行,直到資料庫處於當前版本。
Rake是一個Ruby構建程序,類似於Unixmake程序,Rails利用它來簡化複雜任務的執行,比如更新資料庫結構等。
Running Migrations for Production and Test Databases
如果要指定要用於遷移的Rails環境,請使用Rails_ENV shell變量。
例如−
library> export RAILS_ENV = production library> rake db:migrate library> export RAILS_ENV = test library> rake db:migrate library> export RAILS_ENV = development library> rake db:migrate
注意−在Windows中,使用「set RAILS_ENV=production」而不是export命令。
What is Next?
現在我們有了資料庫和所需的表。在接下來的兩章中,我們將探討兩個重要的組件,稱爲Controller(ActionController)和View(ActionView)。