"null: false"到底是做什么的?



我最近创建了一个Rails迁移,以在我的设计用户中添加用户名。

    add_column :users, :username, :string

我创建了一个测试帐户并注册而没有输入用户名。注册通过了没有用户名的用户。我必须解决此问题,因为我需要一个用户名来设置配置文件URL。因此,我将迁移更新为:

    add_column :users, :username, :string, null: false

我认为这将阻止用户使用空名称创建帐户 - 无效!我仍然要注册没有用户名。

最终添加...

        validates_presence_of :username

...向我的用户.RB模型解决了问题。但是,为什么没有null:false停止它呢?我为什么要保留它,如何工作?

此语句:

add_column :users, :username, :string, null: false

准确地转换为SQL DDL(数据定义语言)标准:

ALTER TABLE users ADD username VARCHAR(255) NOT NULL;

尾随NOT NULLnull: false的效果。您可以使用其他列修饰符将其中一些直接转换为DDL。

请记住,如果您已经将迁移应用于数据库,则应使用新的迁移文件进行更多修改。迁移Ruby文件的更新在已经应用迁移时不会传播到数据库架构。最终,您可以回滚最后的迁移并重新运行它们,但是随后您可以在模式回滚过程中丢失现有数据。请参阅更改现有迁移

最新更新