2013-04-29 9 views
5

Sto lavorando con la cache nel mio progetto Rails e voglio far scadere la cache di un particolare URL. Ho ottenuto il seguente comando per scadere frammento corrispondente all'URL passato:Rails espira la cache dei frammenti dai modelli

ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/") 

Sono confuso dove mettere questo codice nel mio progetto Rails in modo che venga eseguito non appena l'URL in un campo di testo viene aggiunto e pulsante di scadenza viene cliccato.

risposta

3

Il ActionController::Caching::Sweeper è un bel modo per farlo, fa parte dell'osservatore di Rails.

http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

class MyModelSweeper < ActionController::Caching::Sweeper 
    observe MyModel 

    def after_save(object) 
    expire_fragment('...') 
    end 
end 
+0

Non voglio un osservatore nel modello. Ho già implementato sweepers nel mio progetto. Ma questo quando vuoi che termini la cache se url senza cancellare il cahe completo. Gli aiutanti sono nel posto giusto? –

7

probabilmente si dovrebbe prendere in considerazione un approccio diverso. I modelli non dovrebbero preoccuparsi di come funziona il caching e tradizionalmente l'intero approccio di sweeper tende a diventare complesso, ingombrante e non sincronizzato con il resto del codice.

Fondamentalmente, non si dovrebbe mai dovere espirare manualmente i frammenti. Invece, si modifica la chiave di cache/url una volta che il modello è stato aggiornato (in modo da avere una nuova voce di cache per la nuova versione).

Oggigiorno la saggezza comune è utilizzare l'approccio Russian Doll Caching. Il link passa a un articolo che spiega le basi e il prossimo Rails 4 will contain even better support.

Questo è probabilmente il modo migliore per utilizzare la maggior parte delle applicazioni Rails standard.

Problemi correlati