2010-12-22 59 views
2

我有動作緩存在我的網站的索引工作,併成立了工作正常一個SiteSweeper:導軌清掃器可以在不同的控制器上工作嗎?

# app/controllers/admin/sites_controller.rb 
class Admin::SitesController < Admin::BaseController 
    cache_sweeper :site_sweeper, :only => [:create, :update, :destroy] 
    caches_action :index, :cache_path => '/admin/sites' 
    ... 

# app/sweepers/site_sweeper.rb 
class SiteSweeper < ActionController::Caching::Sweeper 
    observe Site 

    def after_save(site) 
    expire_cache(site) 
    end 

    def after_destroy(site) 
    expire_cache(site) 
    end 

    def expire_cache(site) 
    expire_action '/admin/sites' 
    end 
end 

但我也想到期,只要任何出版商都保存或銷燬/管理/網站。是否有可能讓PublisherSweeper使用類似這樣的東西過期網站索引?

# app/sweepers/publisher_sweeper.rb 
class PublisherSweeper < ActionController::Caching::Sweeper 
    observe Publisher 

    def after_save(publisher) 
    expire_cache(publisher) 
    end 

    def after_destroy(publisher) 
    expire_cache(publisher) 
    end 

    def expire_cache(publisher) 
    expire_action '/admin/sites' 
    end 
end 

我知道我可以在各種發佈者操作中調用expire_action'/ admin/sites'。我只是想知道如果清掃工有這種能力(讓我的控制器更清潔)。

回答

5

一臺清掃車可以觀察到許多型號,任何控制器可以有多個清掃車。

我想你應該改變你的邏輯來使用類似的東西:

class SiteSweeper < ActionController::Caching::Sweeper 
    observe Site, Publisher 
    (…) 
end 

在PublishersController

cache_sweeper :site_sweeper, :admin_sweeper 

所以你不要重複清洗/管理/網站的邏輯。稱它爲AdminSweeper,所以當出現問題時,你知道唯一一個過期「/ admin/sites」動作的地方。

+0

哦,所以清掃工必須觀察Site以便過期SiteController行動。謝謝! – jhiro009 2010-12-23 20:57:25

相關問題