我正在構建一個服務欄應用,客戶可以訂購3種不同的服務,但根據所選服務的不同,會有不同的價格和細節。使用按鈕設置cookie並顯示cookie中的值
我不想爲我的訂單製作很多表格,所以我試圖根據用戶點擊的按鈕製作一個存儲整數的不同訂購cookie,然後根據cookie值顯示訂單價格和訂單詳細信息,如週轉時間。
截至目前我嘗試存儲按鈕點擊餅乾,像這樣<%= link_to 'Package 1', controller:'order, action:'order_one'%>
在我的路線等被定義:即使我已經resources: order
定義get 'order_one', to: 'order#order_one', as: 'order_one'
。
在我的控制器的order_one
方法定義:
def order_one
cookies[:orderref]=1
redirect_to '/order'
end
和調用before_action
上capture_order
方法是cookies[:orderref] = params[:orderref] if params[:orderref]
此刻當我點擊的按鈕order_one
鏈接它只是刷新主頁,所以我不確定我在做錯誤的設置這個cookie。
編輯:爲了增加
class OrderController < ApplicationController
before_action :set_user, except: [:new, :create]
before_action :set_admin, only: [:edit, :update, :destroy]
before_action :capture_order_cookie
def new
@order = Order.new
#TODO: Handling the cookie's here
if cookies[:orderref] == 1 #Custom Text
#TODO: price
elsif cookies[:orderref] == 2 #Custom Text & Custom Imagery
elsif cookies[:orderref] == 3 #Custom Text & Custom Cartoon
#might run into a problem bc order isn't created and am trying to set price before creation, could just put price later on?
end
end
def index
#TODO: AJAX so order's disappear from view when status changes
@orders = Order.all #TODO: maybe limit this?
@orders_user = current_user.orders.where(status:2)
@orders_user_completed = current_user.orders.where(status: 4 || 5)
#Admin stuff
@orders_active = @orders.where(status: 2)
@orders_review = @orders.where(status: 3)
@orders_completed_not_paid = @orders.where(status: 4)
@orders_all_completed = @orders.where(status: 5)
end
def create
@order = Order.where(order_params).first_or_create
@order.status = 1
if @order.save
flash[:success] = "Order was successfully made"
redirect_to root_path
else
#flash error
flash[:error] = "Error making order"
render 'new'
end
end
def edit
@order = set_order
end
def update
@order = set_order
if @order.update(order_params)
flash[:success] = "Order was successfully updated"
redirect_to dashboard_path
else
flash[:error] = "Error updating"
render 'edit'
end
end
def destroy
#TODO: destroy for orders that were refunded/cancelled
end
#Accepting order & adding user_id to order
def accept
@order = set_order
if @order.user_id.present?
redirect_to root_path, flash[:error]='Order already taken'
else
@order.update(user_id: current_user.id)
@order.update(status: 2)
if @order.save
redirect_to root_path, flash[:success]='Order accepted'
else
flash[:error]='Couldn`t process your request'
end
end
end
#Submitting order for review
def submit
@order = set_order
@order.update(status: 3)
if @order.save
redirect_to dashboard_path, flash[:success]='Order submitted for review'
else
redirect_to dashboard_path, flash[:error]='Request failed'
end
end
def order_one
cookies.permanent[:orderref]=1
redirect_to '/order'
end
private
def order_params
params.require(:order).permit(:name, :company, :email, :event_type, :status, :country, :description, :user_id, :admin_comments,
:revision_comments)
end
def set_order
@order = Order.find(params[:id])
end
def set_user
if !current_user
redirect_to root_path
end
end
def set_admin
if !current_user.admin
if current_user
redirect_to dashboard_path
end
redirect_to root_path
end
end
def capture_order_cookie #could do the IFs here?
cookies.permanent[:orderref] = params[:orderref] if params[:orderref]
end
end
您是否檢查並確認cookie是否被設置? –
@ Md.FhanhanMemon它沒有被設置,我想知道爲什麼 – Jack
嘗試'cookies.permanent [:orderref]'。 –