2012-03-14 15 views
1

私は割り当て機能(Railsの)

http://ruby.railstutorial.org/chapters/sign-in-sign-out?version=3.2#top

オンライン、このチュートリアル以下とされている部分8.2.3に私が取得いけないという奇妙な何かがあります。これは、この方法について述べている:

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    current_user = user 
    end 
end 

CURRENT_USER =ユーザー

はdefined.Thisなければならないの割り当てであるが、私はそのように使用ほとんどの言語で奇妙な原因であることに言及します私が値を割り当てたいときは、 "="記号だけを使用します。

はので、彼は、この関数を定義することになります:

def current_user=(user) 
    @current_user = user 
    end 

なぜ彼は直前に使用していませんでしたか?

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    @current_user = user 
    end 
end 

上記のアプローチは間違っていますか?

答えて

1

@current_userはインスタンス変数です。あなたの裸のインスタンス変数を全世界に公開しないことが良い習慣と考えられています。代わりに、getterとsetterを定義します。例えば、セッターでは、妥当性チェックを行うことができます。または、コールバックをトリガーします。または、ある状態をプッシュ/ポップします。

これは単なるもっと便利で安全で柔軟なものです。数行のコードを犠牲にして。

また、ルビーでは、これは言語レベルで強制されます。単にインスタンス変数にアクセスすることはできません。

class Foo 
    def initialize 
    @bar = 1 
    end 
end 

puts [email protected] # raises exception 
関連する問題