所以我设置了一个清扫器来收听模型 Connection。该模型是模型/控制器 Tag 和 Post 之间的关系模型。超标准。当创建或销毁新连接时,我希望清扫器清除相应 Tag#show 上的页面缓存(即标签 id 1 的“/tags/1”,它显示所有关联的帖子)。
看起来很简单,但是我在清扫器中的 expire_page 调用没有做任何事情,而且在日志中,它似乎完全被跳过了。但是通过我的puts,我知道清扫器被调用并且我调用expire_page 的expire_cache 函数被调用。而且我已经尝试了各种方法来指定哪个页面到期,只要引用控制器(例如:controller =>:tags,:controller =>“tags”),甚至尝试放入相对url,但没有任何效果一个区别。
在我的 Tags 控制器中,我有另一个功能可以清除 Tag#index 页面,并且实际上工作正常。关于我在这里做错了什么的任何想法?
所以我有这个作为我的清扫器:
class CacheSweeper < ActionController::Caching::Sweeper
observe Connection
def after_create(record) expire_cache(record) ; end
def after_destroy(record) expire_cache(record) ; end
def expire_cache(record)
puts "begin page expire"
expire_page(:controller => '/tags', :action => 'show', :id => record.tag.id)
puts "end page expire"
end
end
这是我的标签控制器,精简:
class TagsController < ApplicationController
before_filter :signed_in_user, only: [:new, :destroy]
caches_page :index, :show
cache_sweeper :cache_sweeper
def create
@tag = Tag.create(params[:tag])
if @tag.save
flash[:success] = "Tag added"
redirect_to :action => "tags", :controller => :admin_pages
expire_page(:controller => :tags, :action => :index)
else
render 'new'
end
end
def index
@tags = Tag.all
end
def show
@tag = Tag.find(params[:id])
@posts = @tags.posts.paginate :page => params[:page], :per_page => 10
end
end