我正在测试我的模型,它在我的Ruby on Rails项目中有两个独特的属性。
可悲的是,shoulda matcher未通过我的should validate_uniqueness_of
测试,因为它正在使用此属性执行保存操作,而另一个属性因null值而无法保存。
这让我思考:
我正在使用Rails 4。
谢谢!
答案 0 :(得分:0)
不,至少不是,如果您希望保证唯一性,因为validate_uniqueness_of
并不能真正确保其名称所暗示的内容。
这有几个原因。首先,某些ActiveRecord操作(例如update_column
,toggle
等)将绕过验证。其次,validates_uniqueness_of
不是线程安全的,因此如果它们同时提交到数据库,则在单独的事务中两个相同值的保存事件可以创建记录。
此外,validates_uniqueness_of
将运行SELECT
语句来检查该值是否已存在,这会为保存模型所花费的时间增加少量开销。