如何使对象在整个控制器的范围内可见?

时间:2011-03-09 07:22:25

标签: ruby-on-rails

所以我需要实例化一个需要参数的对象。我还需要在实例化后在整个控制器的范围内使用此对象。如何才能做到这一点?

编辑:一些代码来帮助说明

def beginLoad(user, category)
  #stuff
  @gaobj = GraphAssistant.new(@arrays.fetch(0), @arrays.fetch(1))
  values = @gaobj.externalize
  ret = {"axis_label" => values.fetch(0), "out" => values.fetch(1), "i" => values.fetch(2)}
end

但是当我尝试再次使用此方法调用它时:

def resumeLoad(direction)
  if direction.eql? "left"
    @gaobj.decrementPosition
  elsif direction.eql? "right"
    @gaobj.incrementPosition
  end
  #other stuff
end

它不起作用。我想我可以在视图中完成所有这些逻辑,但这会对性能产生什么影响呢?

2 个答案:

答案 0 :(得分:0)

使用@sign前缀:@foo = Foo.new

更新:听起来你需要这个持续到会话。

在beginLoad结束时,添加:

session[:foo] = @foo

在resumeLoad的开头,添加:

@foo = session[:foo]

答案 1 :(得分:0)

如果从同一控制器操作调用这两个函数,则两者都应该可以访问实例变量(@gaobj)。您需要确保在#beginLoad之前为每个传入请求调用#resumeLoad。这是问题吗?