參考文章:
https://ihower.tw/rails4/migrations.html
為什麼現在才要寫這篇呢?因為發現還是要專門對它做點紀錄,好方便以後喚醒自己的記憶。
Migration,用來控制資料庫結構的檔案。migration的好處就是會自動偵測哪些檔案已經執行過哪些還沒,在團隊合作開發時超級方便的,不需要擔心資料庫結構不同步的問題。
-----------------以下資料出處請詳見參考文章-----------------
資料表修改:
- create_table(name, options) 新增資料表
- drop_table(name) 移除資料表
- rename_table(old_name, new_name) 修改資料表名稱
- change_table 修改資料表欄位
欄位修改:
- add_column(table, column, type, options) 新增一個欄位
- rename_column(table, old_column_name, new_column_name) 修改欄位名稱
- change_column(table, column, type, options) 修改欄位的型態(type)
- remove_column(table , column) 移除欄位
索引(key值):
- add_index(table, columns, options) 新增索引
- remove_index(table, index) 移除索引
※options 可為空,或是:unique => true表示這是唯一。
外來鍵修改:
- add_foreign_key(from_table, to_table, options)
- remove_foreign_key(from_table, to_table, options)
※options 可為空,或是可自定:column => from_table_foreign_key_column (預設是{to_table}_id)和:primary_key => to_table_primary_key_column(預設是id)。
-----------------以上資料出處請詳見參考文章-----------------
這邊就只是單純紀錄這次要修改專案的部份,想要有更進一步了解關於migration用法的人,可以到參考文章有提供很多範例哦。
先新增一個migration檔,檔案的位置會在db/migrate底下,我要在users及products底下新增欄位
$ rails g migration add_fields_to_users_products
打開「日期&時間&_add_fields_to_users_products.rb」檔
class AddFieldsToUsersProducts < ActiveRecord::Migration
def change
add_column :users, :cname, :string
add_column :users, :phone1, :string
add_column :users, :phone2, :string
add_column :users, :address, :string
add_column :users, :zipcode, :string
add_column :products, :startdate, :datetime
add_column :products, :enddate, :datetime
add_column :products, :stock, :integer
add_column :products, :disstartdate, :datetime
add_column :products, :disenddate, :datetime
add_column :products, :disprice, :integer
add_column :products, :discontext, :text
add_column :products, :predictdate, :datetime
end
end
create一個model(同時也會create一個migration檔)
$ rails g model style product_id:integer title:string image_url:string
系統會自動建置以下的檔案
create db/migrate/20160629071919_create_styles.rb
create app/models/style.rb
invoke test_unit
create test/models/style_test.rb
create test/fixtures/styles.yml
執行指令
$ bin/rake db:migrate
資料結構修改完成!