2013-03-25 115 views
0

我想了解这段代码ruby​​ on rails教程中使用self.current_user?

module SessionsHelper 

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

    def current_user=(user) 
    @current_user = user 
    end 

    def current_user 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
    end 
end 

使用线

self.current_user = user 

将它创建一个名为CURRENT_USER为类SessionsController(以上模块属于SessionsController类)的变量?

如果我使用

@current_user = user 

,而不是上面的行,代码似乎工作方式不尽相同。怎么样?!

非常感谢您的时间。

回答

0

self.current_user = user只要调用方法current_user=(user)和方法只做@current_user = user,所以它只是工作一样,如果你做@current_user = user

+0

他们在这种情况下相当,但只是想指出,如果有在CURRENT_USER任何附加逻辑=(),然后只设置@current_user =用户在sign_in()方法将绕过它。 – xkickflip 2013-03-25 06:55:29

+0

你能澄清一下类是'self'指什么?模块'SessionsHelper'包括在'ApplicationHelper',所以我不知道'在不同的控制器配合使用时self'仍然是指同样的事情? – Heisenberg 2014-06-05 20:26:36

0

self.current_user = user,这种表达是指示current_user是在Sessions类(由模块SessionsHelper混入)的方法,而不是局部变量。自那里表示类Sessions,所以这行仅仅是一个方法调用,以@current_user = usercurrent_user=(user)相同的效果。