如何在Rails迁移中将可为空列更改为不可为空列?

26 浏览
0 Comments

如何在Rails迁移中将可为空列更改为不可为空列?

我之前在一个迁移中创建了一个日期列并将其设置为可空。现在我想将其更改为不可空。如果数据库中存在空行,我应该如何操作?如果它们当前为空,我可以将这些列设置为 Time.now。

admin 更改状态以发布 2023年5月24日
0
0 Comments

在Rails 4中,这是更好的(DRYer)解决方案:

change_column_null :my_models, :date_column, false

为了确保不存在具有该列中NULL值的记录,您可以传递第四个参数,它是在记录具有NULL值时使用的默认值:

change_column_null :my_models, :date_column, false, Time.now

0
0 Comments

如果您想在迁移中实现这个功能,那么您可以像下面这样做:

# 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

0