Rails迁移:撤消默认设置列
-
23-08-2019 - |
题
我有问题,我有Rails中,设置了默认设置为列的迁移,这样的例子:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
假设,我喜欢砸在后面的迁移是默认设置,我怎么做,与使用Rails迁移?
我的当前的解决方法是在轨道的迁移自定义SQL命令的执行,这样的:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
但我不喜欢这种方式,因为我现在依赖于底层数据库是如何解释这个命令。在数据库中的变化的情况下,此查询也许可能不再工作和移民将被打破。那么,有没有表达默认设置的撤销在轨?
列的方式解决方案
导轨5 +
def change
change_column_default( :table_name, :column_name, from: nil, to: false )
end
的Rails 3和导轨4
def up
change_column_default( :table_name, :column_name, nil )
end
def down
change_column_default( :table_name, :column_name, false )
end
其他提示
听起来像你在做正确的事与你的“执行”,作为文档指出:
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
导轨4
change_column :courses, :name, :string, limit: 100, null: false
不隶属于 StackOverflow