Rails迁移:撤消列的默认设置
我遇到了这个问题,我在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中表达一个列的默认设置?
change_column_default(table_name, column_name, nil)
也可以完全删除列的默认值。 不需要使用执行。
听起来你正在用'执行'来做正确的事情,正如文档指出的那样:
change_column_default(table_name, column_name, default)
为列设置一个新的默认值。 如果您想将默认值设置为NULL,那么您运气不好。 你需要DatabaseStatements#自己执行适当的SQL语句。 例子
change_column_default(:suppliers, :qualification, 'new')
change_column_default(:accounts, :authorized, 1)
下面的代码片段用于使NULL
列NOT NULL
,但在模式级别跳过DEFAULT
:
def self.up
change_column :table, :column, :string, :null => false, :default => ""
change_column_default(:table, :column, nil)
end
链接地址: http://www.djcxy.com/p/47173.html