如何向通过迁移已经存在的列添加默认值?

我能找到的所有文档都向您展示了如何在列不存在的情况下做到这一点,但在这种情况下它存在。


当前回答

你可以这样做:

class Profile < ActiveRecord::Base
  before_save :set_default_val

  def set_default_val
    self.send_updates = 'val' unless self.send_updates
  end
end

编辑:…但显然这是新手犯的错误!

其他回答

change_column_default :employees, :foreign, false

你应该这样做:

change_column :users, :admin, :boolean, :default => false

但是有些数据库(如PostgreSQL)不会更新之前创建的行字段,因此请确保在迁移时也手动更新字段。

对于Rails 4+,请使用change_column_default

def change
  change_column_default :table, :column, value
end

执行:

rails generate migration add_column_to_table column:boolean

它会产生这样的迁移:

class AddColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :column, :boolean
  end
end

设置默认值adding:default => 1 .单击“添加”

Add_column:table,:column,:boolean,:default =>

Run:

rake db: migrate

你可以这样做:

class Profile < ActiveRecord::Base
  before_save :set_default_val

  def set_default_val
    self.send_updates = 'val' unless self.send_updates
  end
end

编辑:…但显然这是新手犯的错误!