如何向通过迁移已经存在的列添加默认值?
我能找到的所有文档都向您展示了如何在列不存在的情况下做到这一点,但在这种情况下它存在。
如何向通过迁移已经存在的列添加默认值?
我能找到的所有文档都向您展示了如何在列不存在的情况下做到这一点,但在这种情况下它存在。
当前回答
使用def change意味着您应该编写可逆的迁移。而且change_column是不可逆的。你可以向上但不能向下,因为change_column是不可逆的。
相反,尽管它可能是额外的几行,但您应该使用def up和def down
因此,如果您有一个没有默认值的列,那么您应该这样做来添加一个默认值。
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
或者如果您想更改现有列的默认值。
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
其他回答
使用def change意味着您应该编写可逆的迁移。而且change_column是不可逆的。你可以向上但不能向下,因为change_column是不可逆的。
相反,尽管它可能是额外的几行,但您应该使用def up和def down
因此,如果您有一个没有默认值的列,那么您应该这样做来添加一个默认值。
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
或者如果您想更改现有列的默认值。
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
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
change_column_default :employees, :foreign, false
你应该这样做:
change_column :users, :admin, :boolean, :default => false
但是有些数据库(如PostgreSQL)不会更新之前创建的行字段,因此请确保在迁移时也手动更新字段。
你可以这样做:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
编辑:…但显然这是新手犯的错误!