新增欄位且預設值是其他欄位的值
考慮的點如下:
- 希望一個migration即可完成
- 希望可以一次更新所有資料不要造成資料庫負擔
我一開始想有沒有什麼神奇的 helper 可以直接使用, 後來發現我想太多了其實很簡單
關於第一點, 就直接把ruby code寫在migration檔就可以
關於第二點, 使用update_all就可以一次性的更新所有資料, 但要注意 update_all 不跑驗證, 且也不更新updated_at的timestamp
, 不過既然是新增一個欄位然後加default值, 要驗證的需求比較少, update_all就真的足夠了
檔案實作如下:
1 | class AddSellingTimeToProducts < ActiveRecord::Migration[5.2] |
參考 update_all SQL messages:1
2(188.5ms) ALTER TABLE `products` ADD `selling_time` datetime
Product Update All (19.6ms) UPDATE `products` SET selling_time = created_at