我正在通过伟大的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