嘿,我有一个问题:我在我的 rails 应用程序中使用 flash[:notice]。用户来到页面并创建一个新对象。Flash 消息显示“已创建”。现在他点击页面上的一个链接。如果他通过使用浏览器的“返回”按钮返回,则再次显示闪烁消息。flash.now[:notice] 也不起作用(我认为并且我测试过)。问题是文件没有新的渲染。
你有什么想法可以防止这种情况发生吗?谢谢!
嘿,我有一个问题:我在我的 rails 应用程序中使用 flash[:notice]。用户来到页面并创建一个新对象。Flash 消息显示“已创建”。现在他点击页面上的一个链接。如果他通过使用浏览器的“返回”按钮返回,则再次显示闪烁消息。flash.now[:notice] 也不起作用(我认为并且我测试过)。问题是文件没有新的渲染。
你有什么想法可以防止这种情况发生吗?谢谢!
问题不在于 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
我一般使用以下
<% if flash[:notice] %>
<%= flash[:notice] %>
<% flash[:notice]=nil %>
<% end %>
您也可以使用丢弃方法
<% if flash[:notice] %>
<%= flash[:notice] %>
<% flash.discard(:notice) %>
将缓存设置为 no-cache, no-store 将导致对您的服务器产生不必要的请求。相反,您可以使用浏览器的 localStorage / sessionStorage 来达到预期的效果。
我在这里写了一个详细的答案:https ://stackoverflow.com/a/41921476/6590834
我知道丢弃方法,问题不是flash [:notice]的功能,问题是浏览器没有再次呈现文件......我想我必须使用javascript修复它......