2012-01-12 8 views
0

私はショッピングアプリケーションのユーザーを処理するために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をちらっと見

答えて

2

、それが見えます:

Warden::Manager.after_authentication do |user, auth, opts| 
    auth.session[:cart_id] ||= Cart.create!.id 
end 
+0

を使用して、アプリケーション全体

を確認することができます!答えとしてマークする前に、セッションの代わりにauth.sessionを呼び出さなければならない理由はありますか? – varatis

+0

'ApplicationController'には' session'というクラスメソッドがありません。 'session'はインスタンスメソッドです(あなたのコードではクラスコンテキストでそれを呼び出しています)。 'after_authentication'が認証プロキシオブジェクトを2番目のパラメータ(' auth'と呼ぶ)としてブロックに渡し、そのオブジェクトが認証されたユーザのセッションデータを返す 'session'メソッドを持っているため、私のコードが動作します。 –

-1

Simpally application controller

before_filter :set_current_user

def set_current_user Authorization.current_user = current_user end

では、フィルタの前に

を書きます10

あなたはこれが働いているように見えます

` if !current_user.nil? 

    end` 
関連する問題