首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Rails迁移中将可空的列更改为不可空的?

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

Stack Overflow用户
提问于 2011-05-11 23:34:33
回答 6查看 127.3K关注 0票数 210

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-11 23:49:32

如果您在迁移中这样做,那么您可能会这样做:

代码语言:javascript
复制
# 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
票数 223
EN

Stack Overflow用户

发布于 2014-04-11 01:19:33

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

代码语言:javascript
复制
change_column_null :my_models, :date_column, false

要确保该列中不存在具有NULL值的记录,可以传递第四个参数,该参数是用于具有NULL值的记录的默认值:

代码语言:javascript
复制
change_column_null :my_models, :date_column, false, Time.now
票数 190
EN

Stack Overflow用户

发布于 2011-05-11 23:42:49

创建具有带:default =>值的change_column语句的迁移。

代码语言:javascript
复制
change_column :my_table, :my_column, :integer, :default => 0, :null => false

请参阅:change_column

根据数据库引擎的不同,您可能需要使用change_column_null

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5966840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档