Answers:
这是您应该如何做:
change_column :users, :admin, :boolean, :default => false
但是某些数据库(例如PostgreSQL)不会更新以前创建的行的字段,因此请确保在迁移时也手动更新该字段。
change_column_default :employees, :foreign, false
from:
,to:
如果您希望它是可逆的:)
对于Rails 4+,请使用change_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column:foos,:name,默认值:“现有值之物”``change_column_default:foos,:name,默认值:“”`end
change_column_default :products, :approved, from: true, to: false
—但它也不起作用。
使用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 4开始,您无法生成将列添加到具有默认值的表的迁移, 以下步骤将新列添加到具有默认值true或false的现有表。
$ rails generate migration add_columnname_to_tablename columnname:boolean
上面的命令将在表中添加一个新列。
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
执行:
rails generate migration add_column_to_table column:boolean
它将生成此迁移:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
设置默认值::default => 1
add_column:table,:column,:boolean,:default => 1
跑:
耙db:migrate
Key is not present in table error
。
您可以执行以下操作:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
编辑:...但是显然这是菜鸟的错误!
before_save
up
块而不是一个change
块中。您可以将down
块保留为空。它不会将表恢复为原始状态,但可以回滚迁移。