我在之前的迁移中创建了一个日期列,并将其设置为可空。现在我想把它改成不可为空的。假设数据库中有空行,我该如何执行此操作?如果这些列当前为空,我可以将它们设置为Time.now。
发布于 2011-05-11 23:49:32
如果您在迁移中这样做,那么您可能会这样做:
# Make sure no null value exist
MyModel.where(date_column: nil).update_all(date_column: Time.now)
# Change the column to not allow null
change_column :my_models, :date_column, :datetime, null: false
发布于 2014-04-11 01:19:33
在Rails 4中,这是一个更好的(DRYer)解决方案:
change_column_null :my_models, :date_column, false
要确保该列中不存在具有NULL
值的记录,可以传递第四个参数,该参数是用于具有NULL
值的记录的默认值:
change_column_null :my_models, :date_column, false, Time.now
发布于 2011-05-11 23:42:49
创建具有带:default =>
值的change_column
语句的迁移。
change_column :my_table, :my_column, :integer, :default => 0, :null => false
请参阅:change_column
根据数据库引擎的不同,您可能需要使用change_column_null
https://stackoverflow.com/questions/5966840
复制相似问题