Kurt Hsu's blog

The Rails developer in taiwan.


  • 首頁

  • 標籤

  • 分類

  • 歸檔

[Rails]Add default value with other column's value

發表於 2019-12-28 分類於 Rails , Migration

新增欄位且預設值是其他欄位的值

考慮的點如下:

  1. 希望一個migration即可完成
  2. 希望可以一次更新所有資料不要造成資料庫負擔

我一開始想有沒有什麼神奇的 helper 可以直接使用, 後來發現我想太多了其實很簡單

關於第一點, 就直接把ruby code寫在migration檔就可以
關於第二點, 使用update_all就可以一次性的更新所有資料, 但要注意 update_all 不跑驗證, 且也不更新updated_at的timestamp, 不過既然是新增一個欄位然後加default值, 要驗證的需求比較少, update_all就真的足夠了

檔案實作如下:

1
2
3
4
5
6
7
class AddSellingTimeToProducts < ActiveRecord::Migration[5.2]
def change
add_column :products, :selling_time, :datetime

Product.all.update_all("selling_time = created_at")
end
end

參考 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

參考文章:
stackoverflow
Rails API

# Rails # Migration
[CS50]2019哈佛大學程式課程Week1
[Devops]ssh alias server
  • 文章目錄
  • 本站概要

Kurt Hsu

Progress One Percent Every Day
171 文章
55 分類
163 標籤
RSS
  1. 1. 新增欄位且預設值是其他欄位的值
© 2020 Kurt Hsu
由 Hexo 強力驅動 v3.8.0
|
主題 – NexT.Muse v7.3.0