通过重定向获取Flash哈希值

时间:2009-10-16 19:12:02

标签: ruby-on-rails

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

2 个答案:

答案 0 :(得分:79)

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.

答案 1 :(得分:1)

至少在Rails v3.2.1中要注意的是,如果通过至少1次重定向完全没有引用闪存并且之后加载相同的视图,则闪存将通过重定向持续存在。这是我最近经历的伪代码:

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

在使用logger引用flash []进行调试期间,只有在重定向未发生时才会显示。如果您在重定向之前添加了对闪存的引用并且没有明显原因将其丢失,我可以看到这是有问题的。

请参阅此处的ruby文档(Instance protected method: Use at the bottom)