如何在控制器方法之间传递值

有没有办法在控制器方法之间共享数组并存储它直到页面重新加载或调用另一个控制器的方法? 有些方法应该更改数组。

如果要在同一控制器实例的方法之间共享值,则声明一个实例变量:

class BarsController < UsersController before_filter :init_foo_list def method1 render :method2 end def method2 @foo_list.each do | item| # do something end end def init_foo_list @foo_list ||= ['Money', 'Animals', 'Ummagumma'] end end 

如果要在会话中跨两个控制器共享值,则:

 class BarsController < UsersController before_filter :init_foo_list def method1 render :controller => "FoosController", :action => "method2" end def init_foo_list params[:shared_param__] ||= ['Money', 'Animals', 'Ummagumma'] end end class FoosController < UsersController def method2 params[:shared_param__].each do | item| # do something end end end 

为共享参数键指定唯一名称,以避免与现有键冲突。

其他选项是将共享数组存储在会话广告中,在最终渲染之前将其删除。

你可以使用rails cache。

 Rails.cache.write("list",[1,2,3]) Rails.cache.read("list") 

我不确定我的答案是否接近你的要求,但如果我想获得在一个控制器动作中获取的对象/模型的值,并且基于该值我需要获取其他值,我就会这样做另一个控制器动作 我使用类变量并在整个控制器操作中使用它

例如:

 @pages=Post.find.all` @@my_value=@pages.(any manipulations) 

现在@@my_vales可用于该控制器的任何动作..

希望能帮助到你…