2013-03-25 113 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)相同的效果。