2012-05-29 3 views
1

Tous,Rails 3.1 Balayeuse pour la méthode de contrôleur dans un espace de nom différent

J'essaie d'ajouter la mise en cache à mes applications Rails 3.1. Le balayeur vit dans l'espace de noms par défaut, et j'ai un contrôleur qui vit dans l'espace de noms Admin. Par exemple, j'ai BooksController dans l'espace de noms Admin, et chaque fois que la méthode de partage dans ce contrôleur, je veux balayer le cache du livre. J'ai essayé de nommer cette méthode after_books_share, mais la méthode n'est pas appelée.

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 

Répondre

1

Utilisez des barres obliques devant le nom du contrôleur. Expirer dans l'espace de noms par défaut:

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

Expirer dans l'espace de noms admin:

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

roger, désolé, je n'ai fait/en face de l'utilisateur. Il expire donc correctement le cache lorsque le modèle est mis à jour. Cependant, le callback after_books_share n'est jamais appelé lorsque les livres/partages sont exécutés. Peut être la convention de nommage est un peu différente quand il y a un espace de noms. – akoesnan

Questions connexes