Rails忽略清扫器中的expire_page

时间:2012-08-31 23:01:58

标签: ruby-on-rails caching

所以我设置了一个清扫器来收听模型Connection。该模型是模型/控制器Tag和Post之间的关系模型。超级标准。当创建或销毁新的Connection时,我希望清扫器清除相应Tag#show上的页面缓存(即标签ID为1的'/ tags / 1',它显示所有相关的帖子)。

看起来很简单,但我在清扫工中的expire_page调用没有做任何事情,而在日志中,它似乎只是完全被跳过了。但是对于我的看跌期权,我知道清扫器正在被调用,并且调用expire_page的我的expire_cache函数被调用。并且我已经尝试了各种方式来指定哪个页面过期,只要引用控制器(例如:controller =>:tags,:controller =>“tags”),甚至尝试放入相对URL,但是没有什么区别。

在我的标签控制器中,我有另一个清除Tag#索引页面的功能,实际上工作正常。关于我在这里做错了什么想法?

所以我把它作为我的清扫工:

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

0 个答案:

没有答案