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

如果我在索引中定义数组并从hello视图中访问它,那么为什么我会因为 nil 的错误值而出现错误?

4

2 回答 2

4

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

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

于 2013-01-02T10:22:09.907 回答
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

如果您经常这样做,则可以使用 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

于 2013-01-02T15:12:44.247 回答