2011-02-01 5 views
0

一般的に、ヘルパーはコントローラではアクセスできません。しかし、なぜインスタンス変数@current_userを囲んでいるのでしょうか?解説が必要なのはなぜですか? Ruby on Railsチュートリアル9章9.3.3 current-user -

なぜ「current_user =」と「current_user」がメソッドとして定義されていますか? @current_userがこのセクションに必要なすべてのものになるのはなぜですか?

答えて

0

あなたは読書を続ける必要があると思います。

これを実行すると、セクション4.4.5で最初に見られたattr_accessorの機能を効果的に複製し、セクション7.1.1.8で仮想パスワード属性を作成しました。問題はまったく問題ですリスト9.15のコードでは、ユーザーのサインイン状況が忘れられます。つまり、ユーザーが別のページに行くとすぐに、セッションは終了し、ユーザーは自動的にログアウトされます。

この問題を回避するために、我々はクッキーを対応するセッションのユーザーを見つけることができます...

0

私は同僚から良い答えを手に入れました。

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent.signed[:remember_token] = [user.id, user.salt] 
    self.current_user = user 
    end 
end 

def current_user 
    @current_user ||= user_from_remember_token 
end 

リファクタリングの問題です。現在のユーザーのどこからでもコードを複製する必要はありません。

私はまだcurrent_user=メソッドが必要ではないと思います。私は代入のためにインスタンス変数を使用しない理由は見当たりません。

0

私は同じ質問があります。はい、私はcurrent_userがコード複製を防ぐためにこのように構成されていると思います。しかし、私はそれが構文の問題かもしれないと思う。 current_userのpublicプロパティをSessionHelperというpublicプロパティにした場合は、SessionHelper.current_userでアクセスしますが、current_userメソッドとcurrent_user=(user)メソッドを定義すると、余分なクラッタなしでcurrent_userプロパティを使用できます。

だから、それは単なるスタイルの問題だと思います。あなたのアプローチもうまくいきます。

+0

コードをお寄せいただきありがとうございます@ Mab879。まだサイトのハングアップを取得します。 – Terrabits

関連する問題