2016年6月29日 星期三

Cloud9-RoR-Migration(bin/rake db:migrate)

參考文章: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

資料結構修改完成!