我想將事件/id(顯示頁面)中的引數傳遞給我的order_controller。
我使用simple_form_for傳遞用戶輸入的event.id和促銷代碼
#event.show.html.haml
= simple_form_for order_url, url: orders_path(@event, :promocode), method: :post do |f|
= f.hidden_field :event_id, params: {id: @event.id}
= f.input :promocode, value: :promocode, class: 'form-control', placeholder: "Enter your PromoCode"
= f.submit 'APPLY PromoCode'
IDK 如果需要 hidden_??field 來傳遞event_id
#order_controller
class OrdersController < ApplicationController
before_action :order, only: %i[show]
def index
@orders = Order.all.order(created_at: :desc).page(params[:page]).per(5)
end
def show; end
def create
@order = Order.create(title: event.title, user_id: current_user.id, event_id: event.id, order_amount: event.price, order_currency: event.currency)
if !promo.nil?
redirect_to_order
elsif @order.save
redirect_to checkout_create_path(id: @order.id)
else
redirect_to event, alert: 'Something went wrong, try again later'
end
end
def redirect_to_order
promo_validate
order_amount_promo_code = @order.order_amount - promo.promo_code_amount
order.update(order_amount: order_amount_promo_code)
redirect_to @order
end
def promo_validate
if promo.present? && promo.promo_code_amount.positive? && promo.promo_code_currency == event.currency
promo.update(order_id: @order.id)
else
redirect_to event, alert: "This PromoCode is invalid or Your PromoCode Currency doesn't match with Event"
end
end
private
def promo
@promo ||= PromoCode.find_by(uuid: params[:promocode])
end
def event
@event ||= Event.find(params[:id])
end
def order
@order ||= Order.find(params[:id])
end
def order_params
params.require(:order).permit(:title, :event_id, :promocode, :event)
end
end
我正在使用方法def event和def promo從視圖中獲取此引數。我的路線也是這樣的。
- 資源:事件
- 資源:訂單
uj5u.com熱心網友回復:
我會嵌套路線:
resources :events do
resources :orders, shallow: true
end
這在兩個資源之間創建了一個明確的關系,只需查看 URL 就可以看到。要創建一個系結到一個甚至你發送一個 POST 請求的訂單/events/:event_id/orders。
class EventsController
def show
# ..
@order = @event.orders.new
end
end
= simple_form_for [@event, @order] do |f|
= f.input :promocode, value: :promocode, class: 'form-control', placeholder: "Enter your PromoCode"
= f.submit 'APPLY PromoCode'
class OrdersController < ApplicationController
# POST /events/:id/orders
def create
@event = Event.find(params[:event_id])
@order = @event.orders.new(title: @event.title, user: current_user order_amount: @event.price, order_currency: @event.currency)
begin
@promo = PromoCode.find_by!(uuid: params[:order][:promocode])
rescue ActiveRecord::RecordNotFound
@order.errors.add(:promocode, 'is invalid')
end
if @order.save
redirect_to checkout_create_path(id: @order.id)
else
redirect_to event, alert: 'Something went wrong, try again later'
end
end
# ...
end
除此之外,您對促銷代碼的處理非常不確定。而不是到處亂搞并通過更新記錄從“金額”中扣除回扣,您應該存盤原始銷售價格和回扣,然后在結帳時計算總和 - 這也應該單獨存盤。不這樣做相當于保存相當糟糕的記錄,并且可能會給你帶來麻煩——當涉及到金錢時,請務必謹慎行事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419421.html
標籤:
上一篇:為什么谷歌說我的網站不適合手機
