Leon's Blogging

Coding blogging for hackers.

Migration 中新增欄位 + 指令

| Comments

當已經上線的網站,需要新的欄位,而欄位又需要有值,這時就可以直接在 migration 下指令去跑。

在已經啟動的 project 新增欄位時,可以額外下指令,去給初始值。

1
rails g migration add_Date_Time_To_User

execute

1
2
3
4
5
6
7
8
9
10
11
class AddDateTimeToUser < ActiveRecord::Migration
  def up
    add_column :users, :confirmed_at, :datetime

    execute("UPDATE users SET confirmed_at = NOW()")
  end

  def down
    remove_columns :users, :confirmed_at
  end
end

migration 重算 counter cache

counter cache

1
2
3
4
5
6
7
8
9
class AddPostsCountToTopic < ActiveRecord::Migration
  def change
    add_column :topics, :posts_count, :integer, :default => 0

    Topic.pluck(:id).each do |i|
      Topic.reset_counters(i, :posts) # 全部重算一次
    end
  end
end

參考文件:
Active Record - 資料庫遷移(Migration)

Comments