use*_*721 3 ruby-on-rails ruby-on-rails-4
所以我错误地创建了一个表,该表的字段本来应该不是NULL。
我需要创建一个迁移,以将字段从NULLABLE更改为NOT NULL,但是存在一些已经为NULL的行。
我可以更新这些行并更改字段吗?我尝试了这个:
def change
change_column :countries, :effective_date, :date, :null => false, :default => Time.now
change_column :countries, :expiry_date, :date, :null => false, :default => Time.new(9999,12,31)
end
Run Code Online (Sandbox Code Playgroud)
但这失败并出现错误:
Mysql2 :: Error:无效使用NULL值:ALTER TABLE
有任何想法吗?需要同时在mysql和sql服务器上工作。
首先确保没有NULL,然后更改约束。
选项1:
Country.where(effective_date: nil).update_all(effective_date: Time.now)
Country.where(expiry_date: nil).update_all(expiry_date: Time.new(9999,12,31))
change_column :countries, :effective_date, :date, :null => false
change_column :countries, :expiry_date, :date, :null => false
Run Code Online (Sandbox Code Playgroud)
选项2:
change_column_null :countries, :effective_date, false, Time.now
change_column_null :countries, :expiry_date, false, Time.new(9999,12,31)
Run Code Online (Sandbox Code Playgroud)