众所周知,这种情况很容易受到竞争条件的影响。
一种解决方案是:
validates :unique_id, uniqueness: true
然后
begin
Model.find_or_create_by(attributes)
rescue ActiveRecord::RecordNotUnique
retry
end
还有另一种没有唯一性约束的方法吗?这是一个经常发生的动作,如果我没有弄错,唯一性约束要求每次都要遍历整个数据库表,IMO速度很慢。
答案 0 :(得分:0)
正确的方法是在“unique_id”上添加英国,这将使用BTree索引,这意味着不会慢或你可以使用乐观锁