一艺智、遷移是啥倘要?
當(dāng)我們使用rake db:migrate時(shí),就是在使用遷移了
遷移是ActiveRecord的一個(gè)特性十拣,允許我們按照時(shí)間順序管理數(shù)據(jù)庫模式封拧。
二、遷移有啥用夭问?
有了遷移泽西,我們不必再用純SQL來修改數(shù)據(jù)庫模式,而是可以使用簡單的Ruby DSL來描述對數(shù)據(jù)庫表的修改缰趋。
三捧杉、怎么用?
一開始數(shù)據(jù)庫模式并不包含任何內(nèi)容秘血,之后通過一個(gè)個(gè)遷移來添加或刪除數(shù)據(jù)庫表味抖、字段和記錄。
1直撤、創(chuàng)建獨(dú)立的遷移
比如:
class CreateProducts < ActiveRecord::Migration[5.0]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
這個(gè)遷移字段用于添加數(shù)據(jù)庫表非竿、數(shù)據(jù)庫表中包含name、description字段谋竖,同時(shí)隱藏添加了id主鍵字段红柱,這是所有Active Record模型的默認(rèn)主鍵。
timestampes宏添加了created_at和updated_at兩個(gè)字段蓖乘。這三個(gè)字段都是Active Record自動管理锤悄。
這也解釋了為什么我們沒有添加id字段,而會自動出現(xiàn)在數(shù)據(jù)庫中了嘉抒。
遷移文件存儲在db/migrate文件夾中零聚,一個(gè)遷移文件包含一個(gè)遷移類,文件名采用YYYYMMDDHHMMSS_create_products.rb些侍,文件的名稱應(yīng)該對應(yīng)遷移類的名稱(駝峰式)隶症。
如果想增加字段可以使用下面這個(gè)命令:
rails generate migration AddPartNumberToProducts
references字段,用法:
rails generate migration AddUserRefToProducts user:references
這行命令可以生成
class AddUserRefToProducts < ActiveRecord::Migration[5.0]
def
add_reference :product, :user, index: true, foreign_key: true
end
end
2岗宣、使用changes方法
changes方法是目前最常用的蚂会,在大多數(shù)情況下,Active Record知道如何自動撤銷用change方法編寫的遷移耗式,目前只能使用下列方法:
add_column
add_foreign_key
add_index
add_reference
add_timestampes
change_column_default
change_column_null
create_join_table
create_table
disable_extension
drop_join_table
drop_table(必須提供塊)
enable_extension
remove_column(必須提供字段類型)
remove_foreign_key(必須提供第二個(gè)數(shù)據(jù)表) ? remove_index
remove_reference
remove_timestamps
rename_column
rename_index
rename_table
如果不使用change胁住、change_default和remove方法趁猴,那么change_table方法也是可以撤銷的