self.current_user和@current_user之间有区别吗?

时间:2010-12-09 02:19:44

标签: ruby-on-rails ruby

我正在查看这个ruby代码,他们引用了:

@current_user

self.current_user

有什么区别?

http://code.google.com/p/openplaques/source/browse/trunk/www/lib/authenticated_system.rb

3 个答案:

答案 0 :(得分:7)

@current_userinstance variableself.current_user调用第10行的方法返回该实例变量,如果当前为nil则首先填充它。

答案 1 :(得分:4)

@current_user访问对象的实际属性,而self.current_usercurrent_user上调用self方法。

这意味着您可以执行以下操作:

def current_user
  @current_user.first_name
end

现在访问@current_user仍然会为您提供该属性,但self.current_user只会返回您的名字。

在您的具体示例中,他们使用对象缓存仅在第一次访问时设置@current_user属性。这意味着,如果@current_user为nil,它将执行(login_from_session || login_from_basic_auth || login_from_cookie),否则它将仅返回现有对象而不重新初始化它。

答案 2 :(得分:1)

@current_user

取消引用名为@current_user的实例变量。

self.current_user

将消息:current_user发送给self