有没有办法在控制器方法之间共享数组并存储它直到页面重新加载或调用另一个控制器的方法?有些方法应该更改数组。
答案 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
可用于该控制器的任何操作..