ActiveRecord基于动态属性的查找器是否是线程安全的?

问题描述

| 根据这篇(较旧的)帖子,这些Rails 3发现者具有竞赛条件。就像是
 User.find_or_create_by_username(:username => \'uuu\',:password => \'xxx\')
可能会根据该帖子在某些条件下创建两个记录。 这仍然与Rails 3.0+相关吗?谢谢     

解决方法

是的。在执行第一条语句和创建对象的时间量内,可以并行执行第二条语句。 没有独占锁。 防止这种情况的最佳方法是在模型中添加唯一的验证,并在数据库中添加唯一的索引。这样,如果您尝试创建两个具有相同字段的记录,数据库将引发错误。