Ruby on Rails 添加具有默认值的列

示例

以下示例将一列添加admin到users表中,并为该列提供默认值false。

class AddDetailsToUsers < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

在带有PostgreSQL的大型表中,使用默认设置进行迁移可能会花费很长时间。这是因为每行都必须使用新添加的列的默认值进行更新。为了避免这种情况(并减少部署期间的停机时间),您可以将迁移分为三个步骤:

  1. 添加与add_column上面类似的-migration,但不设置默认值

  2. 在应用程序运行时,在rake任务中或在控制台上部署和更新列。确保您的应用程序已将数据写入该行的新行/更新行。

  3. 添加另一个change_column迁移,然后将该列的默认值更改为所需的默认值