我有一个关于唯一性验证的问题。
来自:http://guides.rubyonrails.org/active_record_validations_callbacks.html#uniqueness
“它不会在数据库中创建唯一性约束,因此可能会发生两个不同的数据库连接为您想要唯一的列创建具有相同值的两条记录。为避免这种情况,您必须创建一个唯一性约束数据库中的索引。”
这是否意味着每当我验证唯一性时都必须在数据库中添加索引?还是只有当可能同时插入两个记录时才需要这样做?
这里的最佳实践是什么:Unique 和 Index 始终在一起还是取决于具体情况?
最佳答案
这本质上是一种竞争条件。 Alice 使用电子邮件地址 [email protected] 进行注册。并点击提交按钮两次。因为她很快就击中了它们,所以她只记得它们,并且它们通过了验证。然后两者都写入数据库。解决方案是要求数据库在将它们存储在内存中或写入数据库之间检查唯一性。
您需要做的就是在迁移中添加如下行:
add_index :table_name, :column_name, unique: true
就最佳实践而言,当有两个相同的做法会导致问题时,您肯定希望这样做。如果提交的两条推文具有相同的内容,这可能不是什么大问题,但如果您有两个用户具有相同的电子邮件地址,那就会成为问题。
关于ruby-on-rails - Ruby on Rails - 独特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426915/