私はショッピングアプリケーションのユーザーを処理するためにDeviseを使用しています。私がしたいのは、ユーザーがサインインするたびに新しいカートを作成することです(理想的には、ユーザーがサインアウトするたびに同じカートを破棄しますが、この質問の最初の部分に固執します)。ユーザーがログインしたことをアプリケーションコントローラに知らせる方法(ユーザーは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
私はサインインユーザーに対応するためのアプリケーションのコントローラを伝えることができるいくつかの他の方法はありますか、私は(アプリケーションコントローラ以外の)他の場所でこのコードを置くべきか?助けてくれてありがとう。あなたはこのような何かを行うことができますように
the docsをちらっと見
を使用して、アプリケーション全体
を確認することができます!答えとしてマークする前に、セッションの代わりにauth.sessionを呼び出さなければならない理由はありますか? – varatis
'ApplicationController'には' session'というクラスメソッドがありません。 'session'はインスタンスメソッドです(あなたのコードではクラスコンテキストでそれを呼び出しています)。 'after_authentication'が認証プロキシオブジェクトを2番目のパラメータ(' auth'と呼ぶ)としてブロックに渡し、そのオブジェクトが認証されたユーザのセッションデータを返す 'session'メソッドを持っているため、私のコードが動作します。 –