2013-01-02 74 views
0

当我在动作中定义实例变量时,是否在属于同一控制器的其他动作中不可用。控制器中的实例变量

实例变量应在整个课程中提供。对?

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 

如果我定义从你好鉴于指数数组和访问它,那么为什么我会收到错误的零的假值?

回答

4

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

如果要在请求之间保留数据,请使用sessions

0

如果您在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 

如果你这样做了很多,你可以过滤器之前使用:

class DemoController < ApplicationController 
    before_filter :set_instance_array 

    def index 
    ... 
    end 
    ... 
end 

这会在每个请求之前调用set_instance_array方法。有关更多信息,请参见http://guides.rubyonrails.org/action_controller_overview.html#filters

相关问题