ruby-on-rails - 使用 Ruby On Rails 的 Controller 中的实例变量

标签 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

知识

据我所知,变量作用域 work based on a scope ,至少在 Ruby 上(在 Rails 上)。

我们的 friend 说:

In case of controllers, it present for that HTTP request alone, the object and the instance variables.

好的。我在 create 方法上创建的变量作用域对 destroy 方法没有用,但我正在考虑这个主题并出现以下问题:There's a way to preserve @user 完全针对该 Controller ,无论 HTTP 请求如何?

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

最佳答案

这就是 web 的工作原理以及 http 是“无状态协议(protocol)”的原因。您必须明白,您并不是在用户注销时开始运行程序并停止它。但是您为每个请求“重新启动”程序。这是一个新实例,一个对上一个实例一无所知的新进程,并且肯定不会与其共享任何内存。实际上,处理创建的 Rails 实例和处理销毁的 Rails 实例可以轻松地在两个物理上不同的服务器上运行!

没有状态(但是你在 session 存储或 URL 参数中放置了什么)。 @ 在这种情况下意味着您的 View 可以使用此数据(这在 Ruby 上下文中意味着 Rails 已经在做一些技巧来将它移交给那里,因为这是两个不同的类,否则 View 将不知道 Controller 的任何信息实例变量)。

关于ruby-on-rails - 使用 Ruby On Rails 的 Controller 中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21602082/

相关文章:

ruby-on-rails - PHP 的 Ruby APC 模拟?

ruby-on-rails - 从另一个记录集中排除事件记录集?

ruby-on-rails - Rails - 使用脚手架,链接到新资源时出错

java - 静态初始化

ruby-on-rails - 设计密码重置链接不适用于 https

ruby-on-rails - nginx 比 Apache2 减少了多少内存占用?

ruby - rake 数据库 :migrate runs into an error for an undefined method

java - JNI - 如何使用具有不同字段的多个 Jni 包装器实例?

java - 我应该在声明时还是在构造函数中实例化实例变量?

ruby-on-rails - ruby : How to load information of a yaml file