【问题标题】:flash[:notice] is shown on browser back againflash[:notice] 再次显示在浏览器后面
【发布时间】:2011-03-23 04:10:07
【问题描述】:

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

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

【问题讨论】:

标签: ruby-on-rails flash notice


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    问题不在于 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
    

    【讨论】:

      【解决方案3】:

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

      【解决方案4】:

      我一般用以下

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

      你也可以使用discard方法

      <% if flash[:notice] %>
        <%= flash[:notice] %>
        <% flash.discard(:notice) %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-06
        • 1970-01-01
        • 2015-09-19
        • 2011-04-25
        • 1970-01-01
        • 2012-12-22
        相关资源
        最近更新 更多