什麼是 migration 檔案?

Posted by Anthony Chao on 2019-09-25

為什麼需要 migration?

今天又來到一篇新的文章囉!
這篇的主題叫做 Active Record Migrations
那這是什麼呢?

簡單來說就是資料庫改變的歷史紀錄

在過去,資料庫的改變是無跡可循的,今天要更改資料庫結構就是直接進去 SQL 介面操作,之後的人完全不知道這個表以前曾經有過什麼欄位被移除,或者什麼欄位是後來新增的

有了這個 migration 檔案之後,我們就可以根據這些檔案知道從以前到現在,資料庫結構做了怎樣的變動


如何新增 migration 檔案

首先要知道怎麼新增一個 migration 檔案,我們幾乎都會用指令來新增:

1
rails g migration create_candidates_table

上面的指令會生出下面的檔案內容

1
2
3
4
class CreateCandidatesTable < ActiveRecord::Migration[5.0]
def change
end
end

為什麼我們幾乎都用指令來新增呢?主要是因為 migration 的檔名長得像這樣:

1
20190819031945_create_candidates

前面的時間會是生出這個檔案當下的時間,Rails 會根據這個時間判斷 migration 的順序,每次要自己做這個時間戳記實在有點麻煩而且自己手動寫還很有可能打錯,不覺得嗎?

除了這個最基本的新增,我們可以使用有點魔法的用法:

1
rails generate migration AddVotesToCandidates votes:integer

這個指令可以生出以下檔案內容

1
2
3
4
5
class AddVotesToProducts < ActiveRecord::Migration[5.0]
def change
add_column :candidates, :votes, :integer
end
end

可以看到,竟然裡面內容會自己跑出 add_column 的完整指令,這是因為 rails 會去看指令的關鍵字: Add 跟 To 跟 Candidates,靠這些猜出我們想做的事情

類似的指令也可以用在去除欄位 / 新增表格 / 新增 reference 欄位 / 新增 join table 等等,再請去翻閱文件內容了~

參考資料:

Rails Guide

談Migration概念與用法





prevent_hack