ActiveRecord是基于动态属性的finders线程安全吗?

时间:2011-05-24 08:18:32

标签: ruby ruby-on-rails-3 activerecord

根据this(较旧)帖子,这些Rails 3发现者有竞争条件。像

这样的东西
 User.find_or_create_by_username(:username => 'uuu', :password => 'xxx')
根据帖子,

可能会在某些条件下创建两条记录。

这对Rails 3.0+仍然有用吗?感谢

1 个答案:

答案 0 :(得分:2)

是的,确实如此。在执行第一个语句和创建对象的时间量内,可以并行执行第二个语句。 没有专属锁。

防止这种情况的最佳方法是在模型中添加唯一验证,并在数据库中添加唯一索引。这样,如果您尝试使用相同的字段创建两个记录,数据库将引发错误。