通过迁移的默认值添加到列

问题描述 投票:247回答:7

如何添加一个默认值已经通过迁移存在一列?

所有我能找到的文件显示你如何做到这一点,如果列不存在,但在这种情况下它。

ruby-on-rails ruby migration
7个回答
332
投票

这里是你应该怎么做:

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

但是,一些数据库,如PostgreSQL,不会更新以前创建的行领域,所以一定要manaully更新字段上迁移了。


181
投票
change_column_default :employees, :foreign, false

106
投票

为Rails 4+,采用change_column_default

def change
  change_column_default :table, :column, value
end

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

33
投票

**Rails 4.X +**

由于轨道4,你可以不产生迁移到列添加到表的默认值,下面的步骤添加一个新列,以默认值true或false现有的表。

1. Run the migration from command line to add the new column

$ rails generate migration add_columnname_to_tablename columnname:boolean

上面的命令将在你的表中添加一个新列。

2. Set the new column value to TRUE/FALSE by editing the new migration file created.

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

**3. To make the changes into your application database table, run the following command in terminal**

$ rake db:migrate

8
投票

执行:

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

跑:

耙分贝:迁移


-46
投票

这是你可以做什么:

class Profile < ActiveRecord::Base
  before_save :set_default_val

  def set_default_val
    self.send_updates = 'val' unless self.send_updates
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.