2012-05-29 105 views
1

全部,Rails 3.1清道夫在不同命名空間中的控制器方法

我試圖添加緩存到我的Rails 3.1應用程序。清道夫居住在默認名稱空間中,並且我擁有位於Admin命名空間中的控制器。

例如,我在Admin命名空間中有BooksController,並且無論何時在此控制器中的share方法,我都希望書籍緩存被掃描。我試圖命名此方法after_books_share,但該方法未被調用。

class Admin::BooksController < ApplicationController 
caches_action :show 
cache_sweeper :book_sweeper 
    def share 
    # "Share" a book 
    end 
end 


class BookSweeper < ActionController::Caching::Sweeper 
observe Book 
def after_update(book) 
    expire_cache_for(book) 
end 
def after_books_share 
    book = Book.find params[:id] 
    expire_cache_for(book) 
end 
def expire_cache_for(book) 
    expire_action(:controller => '/books', :action => 'show', :id => book) 
end 
end 

回答

1

在控制器名稱前面使用斜槓。到期的默認命名空間:

expire_action(:controller => '/users', :action => 'index') 

到管理命名空間過期:

expire_action(:controller => '/admin/users', :action => 'index') 
+0

羅傑,對不起,其實我有/在用戶面前。所以它實際上在模型更新時正確地使緩存過期。但是,執行books/share時,call_after_books_share永遠不會被調用。有命名空間時,命名約定可能有點不同。 – akoesnan

相關問題