(сообщение обновлено ниже)
Моя проблема: Требуется ли отдельное действие обновления для различных параметров в моем контроллере.Мне нужны общие действия обновления для параметров (минус параметры в отдельных действиях / методах обновления), действие обновления для: видео и действие обновления для: order_status
Вопрос: Как можноЯ эффективно выполняю несколько операций обновления в моем контроллере?
Вот идея того, чего я хочу, и она не работает:
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)
if user_signed_in? && user.seller?
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),
}
})
@order.order_status = "charged"
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully uploaded.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
def cancel_update
respond_to do |format|
if @order.cancel_update(order_update)
if user_signed_in?
if @order.order_status = "cancelled"
format.html { redirect_to @order, notice: 'Order was successfully cancelled.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
end
def update
respond_to do |format|
if @order.update( order_params.except(:order_status) )
if user_signed_in?
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
if buyer_signed_in?
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
private
def order_params
params.require(:order).permit(:name, :email, :image,:description)
end
def order_status
params.require(:order).permit(:order_status)
end
def order_charge
params.require(:order).permit(:video)
end
...
Мои проблемы с тем, что мне нужно сделать:
Я хочу отдельное действие для случая, когда изменяется order_status, для каждого значения.Самое главное, я хочу, чтобы определенное сообщение отображалось в зависимости от значения, на которое изменяется столбец order_status.
Наиболее важный вопрос:
Мне нужно отдельное действие обновления для взимания платы с клиентов.Это наиболее важно, потому что я не могу просто выставить счет клиенту, когда кто-то обновляет имя, или когда продавец обновляет статус заказа и т. Д.
Я делаю что-то не так или мне нужно настроитьмаршруты, чтобы иметь возможность разрешить несколько действий обновления?
Так как я могу разделить обновления и параметры?
ОБНОВЛЕНИЕ
Я встроил методы обновления в один оригинальный метод, например ...
, но у меня есть одна проблема, уведомления о сообщениях выглядят некорректно с параметром обновления.Появится сообщение «Заказ был успешно обновлен», который не настроен для того, когда я загружаю видео или изменяю столбец ordeR_status
def update
respond_to do |format|
if params["order_status"]
if user_signed_in?
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully order_status.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
if params["video"]
@amount = (@order.order_price).to_i * 100
@amount_seller = (@order.order_price).to_i * 75
if @order.update(order_charge)
if user_signed_in? && user.seller?
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),
}
})
@order.order_status = "charged"
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully uploaded.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
if @order.update(order_params)
if user_signed_in?
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
if buyer_signed_in?
format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
Итак, у меня сейчас две проблемы:
- В настраиваемых сообщениях не отображается
- , и в соответствии с: video param update, я хочу, чтобы статус заказа изменил «заряженный», но то, что у меня сейчас есть, не делаетэто
У кого-нибудь есть идеи, как это улучшить?