让闪存哈希通过redirect保持

我的基本用例是做一些处理,设置flash[:notice] ,然后redirect到一个新的页面。 从我可以告诉,redirect重置闪存标签(请纠正我,如果我错了)。 有办法获得持久性吗? 使用会话不是一个选项,我用cookies破解了这个问题,但是我认为应该有一个更好的方法。

闪存散列持续一个redirect或渲染。 所以你应该罚款的默认设置。

如果您需要保留另一个请求/redirect的闪存散列,则可以调用flash.keep。

 flash.keep # keep the entire flash hash around for an extra request. flash.keep(:notice) # keep just flash[:notice] for an extra request. 

至less在Rails v3.2.1中需要注意的一点是,如果Flash根本没有被引用,那么通过redirect将会持续存在,通过至less1次redirect并在之后加载相同的视图。 这是我最近经历的一个伪代码:

 def some_action (code that may set a flag to redirect 1 time) redirect_to action_path if(redirect_flag) .... end 

不piperedirect如何运行,都会导致flash [:message]出现。

 def some_action logger.debug("Flash[:message] #{flash[:message]}") (code that may set a flag to redirect 1 time) redirect_to action_path if(redirect_flag) .... end 

在使用logging器引用flash []的debugging过程中,只有当redirect没有发生时才会显示。 如果您在redirect之前添加了对闪存的引用,并且没有明显原因将其丢失,则可以看到这是有问题的。

在这里看到ruby文档(实例保护的方法:在底部使用)