[059]Ruby on Rails學習筆記(9)-Active Record遷移

前言:

遷移是一種管理資料庫的方式,遷移使用Ruby DSL而非用手寫SQL,不僅增加效率、也方便管理,

每筆資料的遷移都可以想成資料庫的新版本,資料庫一開始什麼都沒有,但隨著把每筆資料遷移進去,執行刪除、增加、修改等紀錄,此外,active record也能隨著增料庫的建立時間,依照時間順序更新,甚至在更新資料庫時,也會修改db/schema.rb,與資料庫同步更新。


以下分為四大點來介紹遷移的概念:(括號後為關鍵字)

一、使用遷移的產生器:(model,scaffold)

二、Active Record提供用來操作資料庫的方法(add,remove,change欄位、資料表)

三、撰寫Rake任務來管理資料庫綱要與遷移檔案(rake db:xxx語法)

四、遷移與db/schema.rb的關係(schema.rb與migration是同步的)


一、概覽

在建立遷移的檔案中介紹,在db/migrate中增加一筆YYYYMMDDHHMMSS_create_products.rb,上述的檔案會定義出CreateProducts這樣的類別名稱,

當初的輸入指令

$ rails generate migration CreateProducts

假使想再增加欄位,那就是

$rails generate migration CreateProducts product_name:string

換句話說,product就像是此表格的名稱,而product_name就是資料的名字

另外,也可以移除某個欄位,其中的語法為

$rails?generate?migration?RemovePartNumberFromProducts?part_number:string

結果

class RemovePartNumberFromProducts ?< ActiveRecord::Migration

? ?def change

? ? ?remove_column:products, :part_number, :string

? ?end

end

還有一種欄位類型叫做belong_to=rederence

[053]Ruby on Rails學習筆記(5) -Add??second model提到,

$ rails generate model Comment commenter:string body:text article:references

關鍵在於,“article:references”,把model Article 與 model Comment做關聯,

因此會在model/comment.rb也會看到“belongs_to:article”,

甚至在資料庫中還看到這行:t.references:article, index:true


二、建立遷移

接著談到model的產生器與傳入類型的修飾符,像是

$ rails generate migration AddDetailsToProducts 'price:decimal{5,2}'

意味

add_column:products,:price,:decimal, precision:5, scale:2

scale小數點後兩位,precision包括小數點,全部位數要是5位以內


三、撰寫遷移

建立資料表,像是rails g model 或者 rails g?scaffold,

然後去修改資料表、修改欄位、修改欄位的修飾符、外鍵、使用reversible、取消之遷移的revert,

建立:建立資料表的 SQL 語句,附上ENGINE=BLACKHOLE

(使用 MySQL 預設是ENGINE=InnoDB)。

修改資料表

? ?change_table:productsdo|t|

? ? ? ?t.remove:description,:name

? ? ? ?t.string:part_number

? ? ? ?t.index:part_number

? ? ? ?t.rename:upccode,:upc_code ?

? ?end

會移除description與name欄位。新增part_number(字串)欄位,並打上索引。

並將upccode欄位重新命名為upc_code。

修改欄位:change_column:products,:part_number,:text會更改資料表products裡的part_number欄位,類型改為text

欄位修飾符:像是precision,scale,index等等


外鍵:

雖然不是必須的,但可能會想加入外鍵約束來保證參照的完整性

add_foreign_key:articles,:authors

上例會給articles資料表新增外鍵欄位:author_id。外鍵會使用articles資料表的主鍵id作為參照。


使用reversible用法:

架構是

reversible do ?|dir|

? ? ? dir.up do

? ? ? end


? ? ? dir.down do

? ? ? ?end

end


up是負責資料庫綱要的變化

down是取消操作回滾

假使,你真的刪除了data,那他就是irreversible的 migration,


取消之前的遷移:revert

同樣的遷移也可以不用revert處理,但會需要多做幾個步驟。

把create_table與reversible順序對換,create_table換成drop_table,

最後對換updown裡的程式碼。其實這就是revert做的事。


四、執行遷移

$ rake db:roll back 回滾前一次的執行動作

$ rake db:migrate

rake db:setup會新建資料庫、載入資料庫綱要、並用種子資料來初始化資料庫

rake?db:reset會將資料庫移除,再重新建立。等同於rake db:drop db:setup。(執行testfile時,測試成功)

總結:在學fu0

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容