Ruby On Rails控制器中的实例变量

时间:2014-02-06 11:47:46

标签: ruby-on-rails ruby instance-variables

当有人登录我的应用程序时,我使用:

def create
    @user = User.authenticate(params[:email], params[:password])

    [...]
end

好的,当有人退出时:

def destroy
    user = User.find_by_id(session[:user_id])

    [...]
end

知识

据我所知,variable scopes work based on a scope,至少在Ruby上(在Rails上)。

我们的朋友说:

  

对于控制器,它仅针对该HTTP请求,对象和实例变量。

确定。我在create方法上创建的变量范围对destroy方法无用,但我在考虑主题并出现以下问题:有一种方法可以为该控制器保留@user根本不管HTTP请求是什么?

我的意思是,@在这种情况下对我来说似乎没用,因为它不灵活。我不知道,对我来说听起来很奇怪,我不想重复使用它。

1 个答案:

答案 0 :(得分:7)

这就是网络的运作方式以及为什么http是'无状态协议'。您必须了解您没有开始运行程序并在用户注销时将其停止。但是你为每一个请求“重新启动”程序。这是一个新的实例,一个对最后一个一无所知的新进程,并确保与它共享无记忆。实际上,处理创建的Rails实例和处理destroy的Rails实例可以轻松地在两个物理上不同的服务器上运行!

没有状态(但是您在会话存储或URL参数中放置了什么)。 @在这种情况下意味着你​​的视图可以使用这个数据(在Ruby上下文中意味着Rails已经做了一些技巧来将它移交给那里,因为这些是两个不同的类,视图对控制器一无所知实例变量)。