ниже код будет получать новый адрес от внешнего API, если пользователь еще не имеет одно:Как предотвратить состояние гонки в этом простом примере?
def create_address
if current_user.address.blank?
data = AddressAPI.create_address
current_user.update!(address: data['address'])
end
render json: { address: current_user.address }
end
Если два одновременных create_address
запросы поступают в, возможно они оба проходят проверку и current_user.address.blank?
будут созданы два адреса (все, что будет называться update!
, последнее будет отменено другим).
Как мы можем предотвратить это? Нужно ли использовать какой-то механизм блокировки?