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

Ant*_*ect 7 ruby-on-rails

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

all*_*wei 6

你可以使用rails cache.

Rails.cache.write("list",[1,2,3])
Rails.cache.read("list")
Run Code Online (Sandbox Code Playgroud)

  • 但是当不同的会话有不同的价值时会发生什么 (3认同)

Har*_*tty 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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