控制器中的实例变量



当我在一个动作中定义一个实例变量时,它在属于同一控制器的其他动作中不可用吗?

实例变量应该在整个类中可用。对吧?

    class DemoController < ApplicationController
  def index
    #render('demo/hello')
    #redirect_to(:action => 'other_hello')
  end
  def hello
    #redirect_to('http://www.google.co.in')
    @array = [1,2,3,4,5]
    @page = params[:page].to_i
  end
  def other_hello
    render(:text => 'Hello Everyone')
  end
end

如果我在索引中定义数组并从hello视图访问它,那么为什么我得到nil的假值的错误?

实例变量仅在请求(控制器和视图呈现)期间可用,因为Rails为每个请求创建一个新的控制器实例。

如果您在index操作中定义了一个实例变量,它将只在该操作中可用。如果您想为两个操作定义相同的实例变量,您可以做以下两件事之一:

def index
  set_instance_array
  ...
end
def hello
  set_instance_array
  ...
end
...
private
def set_instance_array
  @array = [1,2,3,4,5]
end

如果你经常这样做,你可以使用before过滤器:

class DemoController < ApplicationController
  before_filter :set_instance_array
  def index
    ...
  end
  ...
end

这会在每次请求之前调用set_instance_array方法。详见http://guides.rubyonrails.org/action_controller_overview.html#filters

相关内容

  • 没有找到相关文章

最新更新