ruby-on-rails - Rails 迁移 : Undo default setting for a column

标签 ruby-on-rails rails-migrations

我有一个问题,我在 Rails 中进行了迁移,为列设置了默认设置,如下例所示:

def self.up
  add_column :column_name, :bought_at, :datetime, :default => Time.now
end

假设,我想在以后的迁移中删除默认设置,如何使用 Rails 迁移来做到这一点?

我当前的解决方法是在 Rails 迁移中执行自定义 sql 命令,如下所示:

def self.up
  execute 'alter table column_name alter bought_at drop default'
end

但我不喜欢这种方法,因为我现在依赖于底层数据库如何解释此命令。如果数据库发生更改,此查询可能不再有效,并且迁移将被破坏。那么,有没有一种方法可以表达对 Rails 中列的默认设置的撤消?

最佳答案

Rails 5+

def change
  change_column_default( :table_name, :column_name, from: nil, to: false )
end

Rails 3 和 Rails 4

def up
  change_column_default( :table_name, :column_name, nil )
end

def down
  change_column_default( :table_name, :column_name, false )
end

关于ruby-on-rails - Rails 迁移 : Undo default setting for a column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/887246/

相关文章:

jquery - Rails 与 jquery token 输入 : first character ignored in search

ruby-on-rails - 运行db :migrate on multiple nodes?时如何避免计时问题

ruby-on-rails - 如何在 Rails 测试数据库中创建 mysql 函数?

ruby-on-rails - 通过引擎引入的 Rails 迁移路径

ruby-on-rails - 在 "references"迁移中指定列名称

ruby-on-rails - 什么是Edge Rails?

ruby-on-rails - 尝试引用服务中的数据库记录时出现未初始化的常量错误

ruby-on-rails-3 - 在 Rails 3 迁移中访问自定义辅助方法

ruby-on-rails - FactoryBot 对象缺少某些属性

ruby-on-rails - 在 Rails 中添加列,不记录数据