注意:在我在railstutorial.org上开始教程之前,我完成了codecademy的Ruby教程。
我正在关注Michael Hartl的Ruby on Rails教程。我在第8章,我在sessions_helper.rb文件中。有一个名为“current_user”的变量。我在遵循Ruby教程时学习了范围,但现在我在应用我学到的东西时遇到了麻烦。
在本教程中,有以下代码:
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.digest(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.digest(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
end
特别是,我不明白的是
之间的区别a)self.current_user b)@current_user c)current_user
我在概念中了解全局变量,实例变量和局部变量,但在应用程序中却没有。如果我在没有本教程的训练轮的情况下自己编写代码,我就不知道何时使用哪个。有人可以帮帮我吗?
答案 0 :(得分:2)
current_user
如果您没有明确声明局部变量,它将在当前范围内查找方法,在本例中为def current_user
方法。
@current_user
是一个实例变量。 Rails魔法之一是将所有实例变量从控制器复制到视图中。在这种情况下,它可能来自您的控制器或ApplicationController
,它可能继承自。{/ p>
self.current_user
与current_user
相同,只是代码中的self.current_user=
表示您正在使用其下方声明的方法,而不是分配本地变量。
即
current_user = "pedro"
current_user # "pedro"
self.current_user # method called
如果没有声明局部变量,这就是current_user
:
current_user # method called
self.current_user # same method called