我应该只依靠Ruby on Rails的验证机制来维护列的唯一性吗?



我今天在RubyonRails项目中测试我的模型,它有两个独特的属性。

遗憾的是,should a matcher无法通过我的should validate_uniqueness_of测试,因为它正在用这个属性执行保存操作,而另一个属性由于null值而无法保存。

这让我思考:

我应该删除对数据库中任何唯一列(特别是)的null检查,并仅依靠Rails的验证来防止这些列中的重复值吗

我使用的是Rails4。

谢谢!

否,至少如果您希望保证唯一性,则不会,因为validate_uniqueness_of并不能真正确保其名称的含义。

这有几个原因。首先,某些ActiveRecord操作,如update_columntoggle等,将绕过验证。其次,validates_uniqueness_of不是线程安全的,因此如果在不同的事务中同时提交到数据库,那么两个具有相同值的保存事件可以创建记录。

此外,validates_uniqueness_of将运行一个SELECT语句来检查该值是否已经存在,这会给保存模型所需的时间增加少量开销。

最新更新