4

嘿,我有一个问题:我在我的 rails 应用程序中使用 flash[:notice]。用户来到页面并创建一个新对象。Flash 消息显示“已创建”。现在他点击页面上的一个链接。如果他通过使用浏览器的“返回”按钮返回,则再次显示闪烁消息。flash.now[:notice] 也不起作用(我认为并且我测试过)。问题是文件没有新的渲染。

你有什么想法可以防止这种情况发生吗?谢谢!

4

4 回答 4

3

问题不在于 flash 变量,而在于浏览器缓存。这个解决方案对我使用 Rails 3.2 效果很好(来自这个线程How to prevent browser page caching in Rails):

在 application_controller.rb 中:

before_filter :set_cache_buster

  def set_cache_buster
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
  end
于 2013-02-11T20:09:14.170 回答
2

我一般使用以下

<% if flash[:notice] %>
  <%= flash[:notice] %>
  <% flash[:notice]=nil %>
<% end %>

您也可以使用丢弃方法

<% if flash[:notice] %>
  <%= flash[:notice] %>
  <% flash.discard(:notice) %>
于 2010-07-30T09:58:33.680 回答
1

将缓存设置为 no-cache, no-store 将导致对您的服务器产生不必要的请求。相反,您可以使用浏览器的 localStorage / sessionStorage 来达到预期的效果。

我在这里写了一个详细的答案:https ://stackoverflow.com/a/41921476/6590834

于 2017-01-29T13:36:53.517 回答
0

我知道丢弃方法,问题不是flash [:notice]的功能,问题是浏览器没有再次呈现文件......我想我必须使用javascript修复它......

于 2010-07-30T11:37:55.783 回答