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

时间:2010-03-01 07:27:33

标签: ruby-on-rails

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

3 个答案:

答案 0 :(得分:6)

你可以使用rails cache。

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

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:2)

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

例如:

@pages=Post.find.all`

@@my_value=@pages.(any manipulations)

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

希望它有所帮助...