问题描述
|
根据这篇(较旧的)帖子,这些Rails 3发现者具有竞赛条件。就像是
User.find_or_create_by_username(:username => \'uuu\',:password => \'xxx\')
可能会根据该帖子在某些条件下创建两个记录。
这仍然与Rails 3.0+相关吗?谢谢
解决方法
是的。在执行第一条语句和创建对象的时间量内,可以并行执行第二条语句。
没有独占锁。
防止这种情况的最佳方法是在模型中添加唯一的验证,并在数据库中添加唯一的索引。这样,如果您尝试创建两个具有相同字段的记录,数据库将引发错误。