我正在通過偉大的Michael Hartl教程來構建ruby應用程序here。在Ruby中創建登錄會話時瞭解「current_user」概念
我想了解如何創建一個會話的概念,我被困在瞭解這一行:
self.current_user = user
在這個方法:
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
end
我明白的整個概念用user_token創建一個cookie。
但我不明白是什麼呢self.current_user = user
手段,爲什麼它甚至有必要保留此行的代碼 - 我與令牌的Cookie - 爲什麼我需要知道當前用戶?
此外,這個「自我」存儲在哪裏 - 它不像我在我的一個視圖中可以看到的flash[:success]
參數。所以我不明白它在哪裏。
也有這2種方法在同一模塊中:
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
而且還是我想的目的,連點這個神祕current user
- 是它的目的是爲了創造@current_user
全局變量使用在意見?
如果是這樣的 - 爲什麼有這些有2個功能重複def current_user=(user)
和def current_user
'self'是一個Ruby關鍵字,允許對象引用自身。因此,'self.current_user = user'正在調用模塊的'current_user =(user)'方法,該方法將參數'user'分配給變量'@ current_user'。在你看來,當你調用'current_user'時,你正在調用'current_user'方法,它返回'@ current_user'變量。希望有所幫助。 – 2012-08-15 13:43:12
哦,我剛剛注意到Harti的輔導說的或多或少都是我在我的答案中寫的相同的東西......嗯。你不明白他寫的是什麼嗎?這不是明顯的東西,需要一段時間才能沉入水中(在寫回答時不得不多次複查自己)。 – 2012-08-15 13:49:09
就像Tom L說的那樣,self允許一個對象引用自己,並且所有東西都是Ruby中的一個對象。所以'自我'可以指很多東西,比如類的一個實例(當在一個實例方法中時,就像在你的例子中那樣),類本身(當在類內但是在外部方法中定義時,比如def self.method), etc. – maru 2012-08-15 13:49:20