Привет! Я кодирую купонную систему рельсов. 5.2.3. Но у меня есть проблема. Если код купона введен до оплаты, применяется скидка. Но я не могу обновить итоговую цену, если товар удален из корзины.
Модель заказа: Каждое обновление рассчитывает цену
def subtotal
price = order_items.includes(:product).collect { |oi| oi.valid? ? (oi.quantity * oi.unit_price) : 0 }.sum
end
Контроллер купонов
def check_coupon_code
if @coupon = Coupon.find_by(code: params[:code])
coupın = Coupon.find_by(code: params[:code])
@order = current_order
if @coupon[:redemption_limit] > 0 and @coupon[:active] === true
@order.total_amount = current_order.subtotal - coupın.amount
@order.update(order_param)
Coupon.transaction do
Coupon.where(code: params[:code]).each do |coupon|
coupon.redemption_limit = coupon.redemption_limit - 1
coupon.save
end
end
@order.update(code_apply)
redirect_to "/cart"
flash[:notice] = 'Coupon Code Applied!'
else
redirect_to "/cart"
flash[:danger] = 'Coupon Code Invalid!'
end
else
redirect_to "/cart"
flash[:danger] = 'Coupon Code Invalid!'
end
end
Контроллер позиции заказа
def update
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.update_attributes(order_item_params)
@order_items = @order.order_items
end
def destroy
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.destroy
@order_items = @order.order_items
end