2

そこで、モデル Connection をリッスンするようにスイーパーをセットアップしました。このモデルは、モデル/コントローラーの Tag と Post の間のリレーショナル モデルです。スーパースタンダード。新しい接続が作成または破棄されると、スイーパーが対応する Tag#show のページ キャッシュをクリアするようにします (タグ ID 1 の '/tags/1' は、関連付けられているすべての投稿を表示します)。

単純に思えますが、スイーパーでの私の expire_page 呼び出しは何もしません。ログでは、完全にスキップされているように見えます。しかし、私のプットでは、スイーパーが呼び出され、expire_page を呼び出す expire_cache 関数が呼び出されていることがわかります。そして、コントローラーを参照する限り、どのページを期限切れにするかを指定するあらゆる種類の方法を試しました(例::controller => :tags、:controller => "tags")、相対URLを入れてみましたが、何もしません違い。

私のタグ コントローラー内には、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
4

0 に答える 0