ruby on rails-使Flash哈希通过重定向保持不变

我的基本用例是进行一些处理,设置flash[:notice],然后重定向到新页面。 据我所知,重定向重置了Flash标签(如果我输入错了,请纠正我)。 有没有办法获得持久性? 使用会话不是一种选择,我已经使用Cookie解决了这个问题,但是我认为必须有一种更好的方法。

Samm Bennett asked 2020-08-11T03:57:04Z
2个解决方案
79 votes

Flash哈希将持续存在,仅用于一次重定向或渲染。 因此,您可以使用默认设置。

如果您需要保留Flash哈希以用于其他请求/重定向,则可以调用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.
EmFi answered 2020-08-11T03:57:14Z
1 votes

至少在Rails v3.2.1中需要注意的一点是,如果至少没有通过至少1个重定向对其进行完全引用,则该Flash将通过重定向保留下来,然后再加载相同的视图。 这是我最近的经验的伪代码:

def some_action

(code that may set a flag to redirect 1 time)

redirect_to action_path if(redirect_flag)
....
end

运行此命令将导致无论重定向如何都存在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

在使用记录器引用flash []进行调试的过程中,仅在未发生重定向时才会显示。 如果您在重定向之前添加了对Flash的引用,却没有明显的原因使它丢失,那么我可能会发现这是有问题的。

在此处查看ruby文档(实例保护方法:在底部使用)

sirclesam answered 2020-08-11T03:57:48Z
translate from https://stackoverflow.com:/questions/1579857/getting-the-flash-hash-to-persist-through-redirects