两个页面加载时仍保留Rails Flash消息


71

我在Rails应用程序中使用Flash通知,其代码如下:

flash[:notice] = "Sorry, we weren't able to log you in with those details."
render :action => :new

Flash消息将按预期的方式在“新”操作中呈现,但随后还会在用户访问的下一页(无论可能是什么)上显示该消息。它应该只显示一次,但是有一些东西使它停留在周围。

Answers:


134

有两种方法可以解决此问题:

一是用

flash.now[:notice]

当您的Flash必须在当前请求的末尾丢弃并且不打算在重定向后使用时。

第二个是打电话

flash.discard(:notice)

在请求结束时。

标准闪存消息旨在保留给“下一个”请求。例如,您在处理创建或编辑请求时生成了Flash,然后将用户重定向到显示屏幕。当浏览器向显示屏幕发出下一个请求时,将显示闪光灯。

如果您确实在显示屏幕上生成了闪光灯,请使用flash.now

查看Ruby on Rails API文档以查看Flash哈希如何工作


1
+1,并进一步说明其行为,标准的Flash消息旨在保留给“下一个”请求。例如,您在处理创建或编辑请求时生成了Flash,然后将用户重定向到显示屏幕。当浏览器向显示屏幕发出下一个请求时,将显示闪光灯。如果您实际上在显示屏幕上生成了Flash,请使用flash.now
asc99c 2011年


@ asc99c感谢您的解释,将编辑答案以添加该信息!

16

好的,我解决了这个问题。解决该问题的方法是使用:

flash.now[:notice] = "Sorry, we weren't able to log you in with those details."
render :action => :new

关键部分是flash.now [:notice]而不是flash [:notice]。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.