Rails控制器和实例变量

时间:2012-06-07 00:16:16

标签: ruby-on-rails

典型的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所属的同一对象?

1 个答案:

答案 0 :(得分:5)

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

  4. 1 如果您从index致电show,那么@foos将在页面上初始化并可用。并不是说你应该这样做,因为那令人困惑。