みなさん!最近、MichaelHartleのRoRチュートリアルに取り組んでいます。第8章で、私は2日間私を混乱させた1つの問題に遭遇します。ここに問題があります。セクション8.2.3。
module SessionsHelper
def sign_in(user)
.
.
.
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user # Useless! Don't use this line.
end
end
そしてマイケルはこう書いています:
これを行うと、セクション4.4.5.5で見たattr_accessorの機能を効果的に複製できます。問題は、問題の解決に完全に失敗することです。リスト8.21のコードでは、ユーザーのサインインステータスが忘れられます。ユーザーが別のページ(poof!)に移動するとすぐにセッションが終了し、ユーザーは自動的にサインアウトします。この問題を回避するために、リスト8.22に示すように、リスト8.19のコードによって作成されたrememberトークンに対応するユーザーを見つけることができます。
リスト8.22。
module SessionsHelper
.
.
.
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
end
私の質問は次のとおりです。ユーザーが新しいページに移動したときに、以前のコードでセッションが自動的にログアウトされるのはなぜですか?なぜ2番目のコードはそうではないのですか?ユーザーがログインしている限り、@ current_userの値は、明示的にログアウトするまで常に「user」になると思いますよね?