Являются ли ActiveRecord динамические искатели на основе атрибутов потокобезопасными? - PullRequest
1 голос
/ 24 мая 2011

в соответствии с этой (более старой) записью, эти поисковики Rails 3 имеют условия гонки. Что-то вроде

 User.find_or_create_by_username(:username => 'uuu', :password => 'xxx')

может создать две записи при определенных условиях в соответствии с должностью.

Это все еще актуально для Rails 3.0+? Спасибо

1 Ответ

2 голосов
/ 24 мая 2011

Да, это так. За промежуток времени, в течение которого выполняется первый оператор и создается объект, второй оператор может выполняться параллельно. Там нет эксклюзивного замка.

Лучший способ предотвратить это - добавить уникальную проверку в вашу модель и уникальный индекс в вашей базе данных. Таким образом, база данных выдаст ошибку, если вы попытаетесь создать две записи с одинаковыми полями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...