2012-03-14 70 views
1

我一直在下面这个教程,在线分配功能

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。例如,在setter中,您可以进行有效性检查。或触发回调。或者推/弹出某种状态。

这只是简单的方便,安全和灵活。代码只需几行代码。

另外,在ruby中,这是在语言级别执行的。你不能简单地访问实例变量。

class Foo 
    def initialize 
    @bar = 1 
    end 
end 

puts [email protected] # raises exception