Как сделать так, чтобы после заполнения параметра он не мог быть обновлен или отредактирован снова?
Проблема: У меня есть параметр: видео, которое когда-то было заполненоэто будет взимать плату с клиента.Я хочу сделать так, чтобы после заполнения он не мог обновляться или редактироваться снова.
Я предпринял превентивные меры на стороне просмотра, что после загрузки видео форма редактирования / обновления скрыта и можетне будет создан снова, но я заметил одну вещь: если по какой-либо причине не удается выполнить обновление, можно вернуться на страницу и снова заполнить форму обновления (даже если видео загружено), таким образом снова взимая плату с клиента.
Как это работает: Покупатель создает заказ, идентификатор полосы создается, как только продавец выполнит заказ (загрузив файл или видео), сбор будет снят.
def charge_update
respond_to do |format|
@amount = (@order.order_price).to_i * 100
@amount_seller = (@order.order_price).to_i * 75
if @order.update(order_charge)
begin
charge = Stripe::Charge.create({
:amount => (@order.order_price).to_i * 100,
:description => 'Rails Stripe customer',
:currency => 'usd',
:customer => @order.stripe_customer_token,
:destination => {
:amount => @amount_seller ,
:account => (@order.seller.stripe_token),
}
})
rescue Stripe::CardError => e
charge_error = e.message
end
@order.update_column(:order_status, 2)
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully uploaded.' }
format.json { render :show, status: :ok, location: @order }
elsif
if charge_error
flash[:error] = charge_error
redirect_to user_order_path([@user, @order])
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
private
def order_charge
params.require(:order).permit(:video, :order_status)
end
Не стесняйтесь, дайте мне знать, если есть лучший способ проверить обвинения на клиенте.Больше всего меня беспокоит то, что с клиента взимается плата более одного раза, потому что продавец либо ошибается, либо злонамерен, и т. Д. Я хочу гарантировать, что с клиента будет взиматься плата только один раз.Единственный способ, о котором я могу думать, - это разрешить только одно обновление для столбца видео.
Либо это, либо создание отдельной таблицы для видео с уникальным идентификатором order_id для каждого идентификатора таблицы видео.
ОБНОВЛЕНИЕ
Я закончил тем, что сделал следующее, которое работает ... Если у кого-то есть идеи о лучшем способе, я открыт для предложений!
def charge_update
respond_to do |format|
if @order.video.present?
format.html { redirect_to ([@user, @order]), notice: 'Order already completed!.' }
format.json { render :show, status: :ok, location: @order }
else
@amount = (@order.order_price).to_i * 100
@amount_seller = (@order.order_price).to_i * 75
if @order.update(order_charge)
begin
...
...
...
end