我们有一个表在列上具有唯一索引,可以接受空值.问题是我们发现这个结构只能接受一行具有NULL值.如果我们尝试添加NULL值的第二行,我们会得到一个错误."无法在对象中插入重复的键行...".
我们可以做些什么来保持此列上的索引以及将NULL值添加到多行的能力?
我正在构建一个带有用于身份验证的 Devise 的 Rails 应用程序,它的默认数据库迁移设置以下列:
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
Run Code Online (Sandbox Code Playgroud)
设置null: false和default: ""同时的目的是什么?
我的理解是,null: false有效地使一个值成为必需:即,尝试NULL在该列中保存具有值的记录将在数据库级别失败,而不依赖于模型的任何验证。
但是然后default: ""基本上通过NULL在保存之前将值转换为空字符串来撤消。
我知道对于可选列,您希望拒绝NULL值只是为了确保该列中的所有数据都属于同一类型。但是,在这种情况下,电子邮件和密码绝对不是用户身份验证模型上的可选属性。我确定模型中有验证以确保您无法创建电子邮件地址为空的用户,但是您为什么要default: ""在这里设置呢?它是否提供了一些好处或防止了一些我没有考虑过的边缘情况?