Ruby on Rails - 遷移



Rails Migration 允許您使用 Ruby 定義資料庫模式的更改,從而可以使用版本控制系統使資料庫結構與實際程式碼保持同步。

這有很多用途,包括:

  • 開發人員團隊 - 如果一個人進行模式更改,其他開發人員只需更新並執行“rake migrate”。

  • 生產伺服器 - 當您推出新版本時執行“rake migrate”,以使資料庫也更新到最新狀態。

  • 多臺機器 - 如果您在桌面和筆記型電腦上或多個位置進行開發,遷移可以幫助您使它們全部保持同步。

Rails Migration 可以做什麼?

  • 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)

遷移支援所有基本資料型別 - 以下是遷移支援的資料型別列表:

  • string - 用於小型資料型別,例如標題。

  • text - 用於較長的文字資料,例如描述。

  • integer - 用於整數。

  • float - 用於小數。

  • datetime 和 timestamp - 將日期和時間儲存到列中。

  • date 和 time - 只儲存日期或時間。

  • binary - 用於儲存影像、音訊或影片等資料。

  • Boolean - 用於儲存真或假值。

有效的列選項是 - 以下是有效的列選項列表。

  • limit ( :limit => “50” )

  • default (:default => “blah” )

  • null (:null => false 表示 NOT NULL)

注意 - Rails Migration 執行的操作可以使用任何前端 GUI 或直接在 SQL 提示符中執行,但 Rails Migration 使所有這些操作變得非常容易。

有關這些內容的詳細資訊,請參閱 Rails API

建立遷移

以下是建立遷移的通用語法:

application_dir> rails generate migration table_name

這將在 db/migrate/001_table_name.rb 中建立檔案。遷移檔案包含描述資料庫表資料結構的基本 Ruby 語法。

注意 - 在執行遷移生成器之前,建議清理模型生成器生成的現有遷移。

我們將建立兩個與我們的三個表相對應的遷移 - books 和 subjects

Books 遷移應如下所示:

tp> cd library
library> rails generate migration books

以上命令生成以下程式碼。

Generate

Subject 遷移應如下所示:

tp> cd library
library> rails generate migration subjects

以上命令生成以下程式碼。

Generate

請注意,在建立遷移時,您使用的是 book 和 subject 的小寫形式以及複數形式。這是一種 Rails 正規化,每次建立遷移時都應遵循。

編輯程式碼

轉到應用程式的 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 表中建立五條記錄。

執行遷移

現在您已建立所有必需的遷移檔案。是時候將它們針對資料庫執行了。為此,請轉到命令提示符並轉到應用程式所在的庫目錄,然後鍵入rake migrate,如下所示:

library> rake db:migrate

這將在不存在的情況下建立一個“schema_info”表,該表跟蹤資料庫的當前版本 - 每個新的遷移將是一個新版本,並且將執行任何新的遷移,直到您的資料庫達到當前版本。

Rake 是一個類似於 Unix make 程式的 Ruby 構建程式,Rails 利用它來簡化執行復雜任務(例如更新資料庫結構等)。

為生產和測試資料庫執行遷移

如果您想指定要用於遷移的 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命令。

接下來是什麼?

現在我們有了資料庫和所需的表。在接下來的兩章中,我們將探討兩個重要的元件,即控制器(ActionController)和檢視(ActionView)。

  • 建立控制器(Action Controller)。
  • 建立檢視(Action View)。
廣告

© . All rights reserved.