我不是很精通Rails,但這裏是我的外行對SessionsHelper
中方法的理解。
首先,@current_user
是模塊SessionsHelper
的實例變量。這意味着它持續用於SessionsHelper
中方法的後續調用。
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
因此,通過使用「自我」,而不僅僅是「CURRENT_USER」,CURRENT_USER已經取得的會話的一部分,但尚未存儲在數據庫中,是否正確?
self.current_user = user
不不使 'CURRENT_USER' 的任何一個部分。
self
是指自己,SessionsHelper。
self.current_user =
有效地調用它的自己的方法,setter方法,def current_user=(user)
。
如果是這樣的情況下,上市8.22中列出的方法是getter和 setter方法,正確嗎?
是的。
def current_user=(user) # Setter.
@current_user = user
end
率先CURRENT_USER存儲在數據庫中,
號第一種方法,current_user=
,確實不店什麼到數據庫中。它所做的就是將實例變量@current_user
設置爲user
。
def current_user # Getter.
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
和第二檢索它需要?
第二種方法,current_user
,返回一個現有@current_user
值。
如果@current_user
是nil
(空),它運行
||= User.find_by_remember_token(cookies[:remember_token])
來檢索和設置@current_user
爲User
基於瀏覽器的remember_token的cookie數據庫。
最後,需要getter和setter方法,因爲它不好的做法,暴露出的方法的實例變量(在這種情況下,「sign_in」)?
在我看來,getter和setter方法並不是完全需要的。可以在整個幫手中使用@current_user
。
但是,Devise (a popular user authentication gem)在其助手中使用current_user
方法。這個comment也是相關的。
換句話說,這將是壞的替換:self.current_user = user
與@current_user = user
在 「sign_in」 的方法?
用@current_user = user
替換它應該沒有問題。這個question(與上面鏈接註釋相同的鏈接)顯示了本教程中的功能相同。
來源
2013-05-09 15:57:41
Sun