如果用户还没有地址,下面的代码将从外部 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!
最后调用的地址将覆盖另一个地址)。
我们如何防止这种情况发生?我们是否需要使用某种锁定机制?