通过迁移向列添加默认值

时间:2011-08-17 19:53:08

标签: ruby-on-rails ruby migration

如何向通过迁移存在的列添加默认值?

我能找到的所有文档都会告诉你如果列尚不存在但是在这种情况下它会如何。

7 个答案:

答案 0 :(得分:327)

这是你应该怎么做的:

change_column :users, :admin, :boolean, :default => false

但有些数据库(如PostgreSQL)不会更新以前创建的行的字段,因此请确保在迁移时手动更新字段。

答案 1 :(得分:173)

change_column_default :employees, :foreign, false

答案 2 :(得分:100)

对于 Rails 4 + ,请使用change_column_default

def change
  change_column_default :table, :column, value
end

答案 3 :(得分:44)

使用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

答案 4 :(得分:33)

** Rails 4.X + **

从Rails 4开始,您无法生成迁移以向具有默认值的表添加列, 以下步骤将新列添加到现有表中,默认值为true或false。

1。从命令行运行迁移以添加新列

$ rails generate migration add_columnname_to_tablename columnname:boolean

上面的命令会在表格中添加一个新列。

2。通过编辑创建的新迁移文件将新列值设置为TRUE / FALSE。

class AddColumnnameToTablename < ActiveRecord::Migration
  def change
    add_column :table_name, :column_name, :boolean, default: false
  end
end

** 3。要对应用程序数据库表进行更改,请在终端**

中运行以下命令
$ rake db:migrate

答案 5 :(得分:8)

执行:

rails generate migration add_column_to_table column:boolean

它将生成此迁移:

class AddColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :column, :boolean
  end
end

设置默认值add:default =&gt; 1

  

add_column:table,:column,:boolean,:default =&gt; 1

执行命令

  

rake db:migrate

答案 6 :(得分:-46)

这是你可以做的:

class Profile < ActiveRecord::Base
  before_save :set_default_val

  def set_default_val
    self.send_updates = 'val' unless self.send_updates
  end
end