Rails控制器和实例变量

问题描述 投票:3回答:1

典型的rails控制器可能会执行以下操作:

class FoosController < ApplicationController
  def index
    @foos = Foo.all
  end
end

我非常了解rails,知道@foos将返回一个Foo对象数组,但@foos本身就是一个实例变量。

那么实例变量属于哪个对象?它是FoosController类的一个实例吗?每次访问索引页时是否创建了此对象的不同实例?如果我访问show页面怎么样,其中引入了一个新的变量@foo

def show
  @foo = Foo.find(params[:id])
end

此变量是否属于@foos所属的同一对象?

ruby-on-rails
1个回答
5
投票
  1. 正确;它属于正在处理当前请求的FoosController实例。
  2. 是的,每个请求都会创建一个新的控制器实例 - 这就是为什么实例变量可用于保存单个请求的状态的原因。
  3. 是的,但是:如果没有调用index@foos将不会被初始化,当你展示的代码中点击@foos动作时,没有show实例变量1。

1如果您从index调用了show,那么@foos将被初始化并在页面上可用。不是说你应该这样做,因为这是令人困惑的问题。

© www.soinside.com 2019 - 2024. All rights reserved.