寫 migration 檔內容

Posted by Anthony Chao on 2019-09-26

Writing migrations

上一篇文章講的是如何製作 migration 檔案,這次要來講的是如何寫裡面的內容, Rails guide 裡面提到很多方法,我會把比較常使用的寫下來,詳細內容請看這裡,另外下面的範例也是來自 Rails Guide

  1. Create table

如果是要製作一個表格,我們可以直接在下面放欄位的名字

1
2
3
create_table :users do |t|
t.string :name
end

這個檔案只要執行 rails db:migrate 就會幫我們做出一個 users 的 table,然後裡面有一個名字的欄位,格式是 string

要注意的是每一次生出一個 table 他都會自動幫我們生出一個叫做 id 的欄位,預設為這個表格的 primary key,如果想要自己指定 primary key 可以用 :primary_key 這個選項,或者你不想要 primary key 也可以用 id:false 來處理

  1. Change table

更改表格內容也是一個常見動作

1
2
3
4
5
6
change_table :products do |t|
t.remove :description, :name
t.string :part_number
t.index :part_number
t.rename :upccode, :upc_code
end

上面這個 migration 檔會對 products 表格做幾件事情

1.把 description 跟 name 的欄位拿掉
2.新增一個 part_name 欄位並加上 index
3.把 upcode 欄位改成 upc_code 欄位

  1. Change colun

更改表格欄位也是一個常見動作

1
change_column :products, :part_number, :text

上面這個例子是把 products 表格中的 part_name 欄位資料改成使用 text 這個格式儲存

另外 change column 是一個不可逆的指令,主要是因為他並沒有紀錄一開始你的資料格式

如果要可逆的話建議可改成使用 updown 的方法,而不是用 change,這兩種方法分別寫明當你今天 migrate 的時候執行的是 up 裡面的內容,而如果是 rollback 就是使用 down 裡面的內容

1
2
change_column_null :products, :name, false
change_column_default :products, :approved, from: true, to: false

上面的例子是把 products 表格中的 name 指定為不能是 null 的欄位,下一行是把 approve 這個欄位的初始值設為 false

今天的介紹就先到這邊了,希望可以對英文苦手的初學者有點幫助,但如果要做更複雜的操作還是要去看 Rails Guide 本身的說明或者翻 API 喔~

參考資料:

Rails Guide





prevent_hack