1

私はユーザー認証にauthlogicを使用するRubyonRailsを初めて使用し、以下のコードで正常に動作します

def current_user_session
    return @current_user if defined?(@current_user_**sesssion**)

    @current_user_session = UserSession.find
end

しかし、コードではありません

def current_user_session
    return @current_user if defined?(@current_user_session)
    @current_user_session = UserSession.find
end

セッションのスペルに注意してください(@current_user_session内)

これが論理的なエラーであろうと他の何かであろうと、誰かがこれについて助けることができますか?

4

1 に答える 1

2

これはコードの小さなバグです。あなたがしたい:

def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
end

つまり、返したい変数は、定義済みであり、定義され@current_user_sessionていないことを確認した変数です@current_user

スペルミスで問題なく動作する理由は、defined?(@current_user_sesssion)が常に false を返すため、メソッドのバージョンが常にUserSession.find. を正しく綴ると@current_user_session、最初の呼び出しの後に where@current_user_sessionが定義され、メソッドが返されます@current_user(これはおそらくnilです)。

于 2013-01-04T13:30:00.127 に答える