我已完成Michael Hartl的Ruby on Rails Tutorial。我知道一些關於實例變量,getters和setter的基本概念。Rails - 爲什麼在sign_in方法中使用self.current_user = user
的sign_in方法是here
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
現在我被困在這條線
self.current_user = user
我發現這個相關question,但我還是不明白這一點。
sign_in後,用戶將被重定向到另一個頁面,所以@current_user
將爲零。 Rails只能從cookie或會話中獲取current_user,然後設置@current_user
,以便它不需要在當前請求中再次檢查cookie或會話。
在SIGN_OUT方法
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
出於同樣的理由,我們爲什麼需要self.current_user = nil
因爲用戶會被重定向到root_url?
這裏有一個getter和setter代碼
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
謝謝,但我有點困惑。我已經在'sign_in'方法中將這個標記放入cookie中,所以我不知道在setter中做什麼。 – greenmoon55
那麼你不必做任何事情,可能作者把它作爲一個setter,因爲很可能你會想在設置當前用戶時做各種事情,或者可能只是一種解釋如何覆蓋setter的方法 –