我正在使用Devise處理購物應用程序中的用戶。我想要做的是每次用戶登錄時創建一個新的購物車(理想情況下,每次用戶註銷時都銷燬同一個購物車,但我會堅持這個問題的第一部分)。如何讓應用程序控制器知道用戶已登錄(用戶使用設計進行處理)
到目前爲止,我看這個問題:Devise call backs
我想出了這一點:
class ApplicationController < ActionController::Base
helper :all
protect_from_forgery
before_filter :fetch_categories
.
.
.
Warden::Manager.after_authentication do
session[:cart_id] ||= Cart.create!.id
end
end
......但顯然這是不正確的,因爲我得到這個錯誤:
NameError in Devise::SessionsController#create
undefined local variable or method `session' for ApplicationController:Class
有一些其他的方式,我可以告訴應用程序控制器來響應用戶登錄,或者我應該在其他地方把這個代碼(除應用控制器)?謝謝你的幫助。
這似乎已經奏效整個應用
檢查!在我將其標記爲答案之前,有一件事情:你有什麼想法,爲什麼你必須調用auth.session而不是僅僅是會話? – varatis 2012-01-12 09:15:54
因爲'ApplicationController'沒有名爲'session'的類方法。 'session'是一個實例方法(並且在你的代碼中你在類上下文中調用它)。我的代碼的工作原理是因爲'after_authentication'將身份驗證代理對象作爲第二個參數(我稱之爲'auth')傳遞給該塊,並且該對象具有'session'方法,該方法返回經過身份驗證的用戶的會話數據。 – 2012-01-12 09:18:42