通过迁移向列添加默认值
如何将默认值添加到已经通过迁移存在的列中?
我可以find的所有文档都向您展示了如何在列尚不存在的情况下执行此操作。
以下是你应该怎么做:
change_column :users, :admin, :boolean, :default => false
但是像PostgreSQL这样的一些数据库不会更新之前创build的行的字段,所以请确保您在迁移过程中也经常更新字段。
change_column_default :employees, :foreign, false
对于Rails 4+, use change_column_default
def change change_column_default :table, :column, value end
这是change_column_default文档的链接。
使用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.X + **
现在,由于没有选项可以将新列添加到通过rails迁移中的terminal定义的默认值的表中, 因此需要遵循以下步骤将新列添加到默认值true或false的现有表中。
1.从命令行运行迁移以添加新列
$ rails generate migration add_columnname_to_tablename columnname:boolean
上面的命令将在你的表中添加一个新的列。
2.编辑新创build的迁移文件,将新列值设置为TRUE / FALSE。
class AddColumnnameToTablename < ActiveRecord::Migration def change add_column :tablename, :columnname, :boolean, default: false end end
** 3。 要对您的应用程序数据库表进行更改,请在terminal中运行以下命令**
$ 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:table,:column,:boolean,:default => 1
跑:
耙db:迁移
这是你可以做的:
class Profile < ActiveRecord::Base before_save :set_default_val def set_default_val self.send_updates = 'val' unless self.send_updates end end