我有问题,我有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)

下面的代码片断我使用,使NULLNOT 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top