5

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

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

我对 rails 了解得足够清楚,知道它@foos会返回一个 Foo 对象数组,但它@foos本身就是一个实例变量。

那么实例变量属于哪个对象呢?它会是 FoosController 类的一个实例吗?每次访问索引页时是否都会创建此对象的不同实例?如果我访问@foo引入了一个新变量的显示页面怎么办:

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

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

4

1 回答 1

7
  1. 正确的; 它属于FoosController处理当前请求的实例。
  2. 是的,每个请求都会创建一个新的控制器实例——这就是为什么可以使用实例变量来保存单个请求的状态。
  3. 是的,但是:如果index未调用,则不会被初始化,在您显示的代码中执行操作时@foos没有@foos实例变量1show

1 如果您调用indexfrom show, then@foos将被初始化并在页面上可用。并不是说您应该这样做,因为这令人困惑。

于 2012-06-07T00:20:00.063 回答