0
次のコードは、外部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
2つの同時create_address
要求が来る場合、それは彼らが両方current_user.address.blank?
チェックを通過しますが可能ですし、 2つのアドレスが作成されます(最後にupdate!
と呼ばれるものは、もう1つが上書きされます)。
どうすればこの問題を防ぐことができますか?何らかのロック機構を使用する必要がありますか?