pat*_*ick 6 ruby ruby-on-rails
我有一个具有页面缓存的控制器操作,我制作了一个清扫器,它使用控制器调用expire_page并指定了操作...
控制器操作呈现js.erb模板,所以我试图确保expire_page删除public/javascripts中的.js文件,它没有这样做.
class JavascriptsController < ApplicationController
caches_page :lol
def lol
@lol = Lol.all
end
end
class LolSweeper < ActionController::Caching::Sweeper
observe Lol
def after_create(lol)
puts "lol!!!!!!!"
expire_page(:controller => "javascripts", :action => "lol", :format => 'js')
end
end
Run Code Online (Sandbox Code Playgroud)
...所以,我访问javascripts/lol.js,我得到了我的模板...我验证了public/javascripts/lol.js存在......然后我创建了一个新的Lol记录,我看到了"哈哈!" !!!!!!" 意味着触发了after_create观察者方法,但是expire_page什么也没做......
根据 RailsGuides 的说法:“页面缓存会忽略所有参数。” 我认为我在处理兑现.xml响应时遇到了类似的问题:我会编写 的缓存/lol.xml,但试图使 的缓存过期/lol(write并且expire可以在服务器日志中看到操作)。我使它工作的方式:我使缓存“与格式无关”,如下所示:
cashes_page :lol, :cache_path => Proc.new { |controller| controller.params.delete_if {|k,v| k == "format"} }
Run Code Online (Sandbox Code Playgroud)
并在清扫器中过期,如下所示:
expire_page(:controller => "javascripts", :action => "lol")
Run Code Online (Sandbox Code Playgroud)
它解决了我的问题。另外,请注意,您的lol操作不应该被调用吗lols?祝你好运。