2012-05-29 2 views
1

모두Rails 3.1 다른 네임 스페이스의 컨트롤러 메소드 스위프

Rails 3.1 앱에 캐싱을 추가하려고합니다. 스위퍼는 기본 네임 스페이스에 있으며 Admin 네임 스페이스에있는 컨트롤러가 있습니다.

예를 들어, Admin 네임 스페이스에 BooksController가 있고이 컨트롤러의 공유 메서드에서 책 캐시를 스윕해야 할 때가 있습니다. 이 메소드의 이름을 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

로저, 미안 해요 실제로 사용자의 앞에 /가 않았다. 따라서 모델이 업데이트되면 캐시가 실제로 만료됩니다. 그러나 콜백 after_books_share는 책/공유가 실행될 때 호출되지 않습니다. 네임 스페이스가있을 때 명명 규칙이 약간 다를 수 있습니다. – akoesnan

관련 문제