通过迁移向列添加默认值

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

我可以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 updef 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