如何添加一个默认值已经通过迁移存在一列?
所有我能找到的文件显示你如何做到这一点,如果列不存在,但在这种情况下它。
这里是你应该怎么做:
change_column :users, :admin, :boolean, :default => false
但是,一些数据库,如PostgreSQL,不会更新以前创建的行领域,所以一定要manaully更新字段上迁移了。
change_column_default :employees, :foreign, false
为Rails 4+,采用change_column_default
def change
change_column_default :table, :column, value
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
由于轨道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
设置默认值加法:默认=> 1
add_column:表,:柱,:布尔值,:默认=> 1
跑:
耙分贝:迁移
这是你可以做什么:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end