Я получаю несколько запросов к конечной точке от внешнего интерфейса.Например, внешний интерфейс загружает 10 изображений в облако Google, и всякий раз, когда внешний интерфейс получает ответ от облака Google, он вызывает API-интерфейс к внутреннему интерфейсу для сохранения записи ресурса в БД.В базе данных asset_ids хранятся в столбце с именем asset_ids
типа массива.Теперь проблема в том, что из 10 изображений некоторые изображения не сохраняются в столбце массива.Некоторые запросы пытаются переопределить предыдущие данные в столбце массива.
Примечание: - Когда я пытался с оптимистической блокировкой, я получаю исключение как ActiveRecord::StaleObjectError
.Итак, какой будет простой подход к решению проблемы.
Ниже приведена конечная точка, которая обрабатывает запросы.
def upload_assets
gcs = GoogleCloud::StoreAssetDetail.new(file_upload_params, current_user: current_user)
if gcs.process
@gallery.asset_ids << gcs.asset_id
@gallery.name = gallery_params[:name] if gallery_params[:name].present?
if @gallery.save
asset = Asset.find(gcs.asset_id)
render json: { asset_id: asset.id, imgix_url: asset.decorate.imgix_cdn }, status: :created
else
respond_with_error(@gallery.errors.full_messages.join(', '), :unprocessable_entity, @gallery.errors)
end
else
respond_with_error(gcs.errors.full_messages.join(', '), :unprocessable_entity, gcs.errors)
end
rescue ActiveRecord::StaleObjectError
puts "Error while uploading"
end