在Rails 3(使用Chrome)中,我设置了一个闪存,调用redirect_to,然后将浏览器发送回用户之前所在的页面。
但是,Chrome无法呈现此页面;相反,Chrome从缓存中获取它。这意味着,例如,不渲染闪光灯。
我可以在URL中添加一个随机参数,以确保不使用缓存,但这很笨拙。
如何确保重定向的页面重新呈现?
答案 0 :(得分:1)
我可以通过以下几种方式来做到这一点:meta http-equiv
标签或http标头。
方法A)meta http-equiv
将以下内容添加到模板的head部分。
<% if @prevent_caching %>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"/>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
<% end %>
然后,在任何控制器操作中,您可以在呈现页面之前说出@prevent_caching = true
。
这看起来有点笨拙,我相信meta http-equiv
可能不可靠。因此...
方法B)http标头。 这是告诉浏览器不要缓存的更直接,更可靠的方法: 见How to control web page caching, across all browsers?
我会将它们放在ApplicationController中的受保护方法中,这将允许您从任何其他控制器调用它(因为它们都从此继承)
#in app/controllers/application.rb
protected
def prevent_browser_caching
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' # HTTP 1.1.
response.headers['Pragma'] = 'no-cache' # HTTP 1.0.
response.headers['Expires'] = '0' # Proxies.
end
然后,除了你调用方法而不是设置变量之外,它就像之前一样。
#in the controller where you don't want the response to be cached
prevent_browser_caching