当我在一个动作中定义一个实例变量时,它在属于同一控制器的其他动作中不可用吗?
实例变量应该在整个类中可用。对吧?
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