Rails闪存通知不会在Safari中消失?

我有一个管理学生的Rails 3.2应用程序。 它在顶部有一个相当典型的导航栏(基础5),其中包含一个快速搜索字段。 导航栏显示在站点的每个页面上。

如果您在搜索字段中输入有效(数字)学生ID,则只需跳转到该学生的页面即可。 如果输入文本或其他非数字输入,则会出现闪烁错误,要求输入有效内容。 如果您输入了未找到的ID,则会收到一条闪存通知,说明找不到该ID。 在后两种情况中的任何一种情况下,控制器应该让您回到您来自的任何页面并显示相应的Flash消息。

对于初学者,这是视图中的搜索字段:

   

这是控制器动作:

 def search session[:return_to] ||= request.referer if params[:search].to_i.zero? flash[:error] = %Q[ Please enter a numeric student ID.].html_safe redirect_to session.delete(:return_to) else id = params[:search].to_i.abs @student = Student.search(id).first if @student redirect_to @student else flash[:caution] = %Q[ Sorry, we couldn't find a student with ID #{id}.].html_safe redirect_to session.delete(:return_to) end end end 

最后,这是在application.html.erb中呈现flash消息的代码:

  <div data-alert class="alert-box cbc-">  × 

在Chrome和FireFox中,这完全符合预期。 闪光灯出现一个请求,然后消失。 但是,在Safari中,一旦闪存出现,它就永远不会消失。 因此,例如,如果您在主页上收到错误flash,则可以刷新所需的全部内容。 它保持不变。 你可以去另一个页面然后回来,它仍然存在。 其他页面也是如此。 一旦Flash消息出现在给定页面上,它就不会消失。

因此我的问题是:如何在第一次请求后让Safari清除闪存?

我在渲染页面时意识到整个“flash vs. flash.now”问题。 但即便如此,如果你只是刷新,闪光灯也会消失。 在这种情况下我实际上尝试过flash.now,但是在任何浏览器中都没有显示flash。

由于这似乎是特定于浏览器的问题,因此以下是我系统上的一些进一步统计信息:

最后一个观察。 在Safari中解决了这个问题之后,我注意到如果我点击http://localhost:3000/书签,那就可以清除闪存了。 当然,我的站点布局中的所有导航链接都包含相对路径,而书签则调用完整的URL。

无论如何,希望是有道理的。 在此先感谢您的帮助!