Rails迁移中如何移除列的默认值

3

我在我的Rails项目中有这个迁移

class ChangeColumnDefaultOfTemp < ActiveRecord::Migration
  def up
    change_column_null :states, :temp, false, ''
    change_column_default :states, :temp, ''
  end

  def down
    change_column_null :states, :temp, true
    change_column :states, :temp, :string, default: nil
  end
end

我能使用以下方法撤销非空约束:

change_column_null :states, :temp, true

但是这个命令

change_column :states, :temp, :string, default: nil

没有给我期望的结果

rake db:migrate

temp  | character varying(255)  | not null default ''::character varying

rake db:rollback


temp  | character varying(255)  | default NULL::character varying

-- Expected is
temp  | character varying(255)  |

注意:寻找类似于

的东西。

ALTER [ COLUMN ] column DROP DEFAULT

ref

1个回答

2

我认为这是Rails中的一个常见bug,当你有一个string类型的列时。我建议使用原生SQL:

class ChangeColumnDefaultOfTemp < ActiveRecord::Migration
  # ...
  def down
    execute <<-SQL
      ALTER TABLE states ALTER COLUMN temp DROP DEFAULT;
    SQL
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接