Hola! A ver si alguien me puede ayudar con lo siguiente porque ando un
poco perdido:
He estado aprendiendo sobre caching siguiendo The Rails Way (capítulo
10) y probando a cachear fragmentos. Funciona muy bien pero no consigo
limpiarlos con cache_sweeper.
Tengo un modelo Plant al que quiero asociar un sweeper para que borre
los caches cuando se modifique, así que para ello tengo:
###################################################
app/models/plant_sweeper.rb
###################################################
class PlantSweeper < ActionController::Caching::Sweeper
observe Plant
def expired_cached_content(plant)
expire_fragment(:fragment => ‘families’)
expire_fragment(:fragment => ‘generes’)
end
alias_method :after_save, :expire_cached_content
alias_method :after_destroy, :expire_cached_content
end
###################################################
###################################################
app/controllers/plants_controller.rb
###################################################
class PlantsController < ApplicationController
cache_sweeper :plant_sweeper, :only => [:create, :update, :destroy]
(…)
end
###################################################
El problema es que cuando ahora voy a /plants, me dice que:
NoMethodError (undefined method `cache_sweeper’ for
PlantsController:Class)
He estado buscando pero no encuentro por qué el controlador no me
reconoce esto de “cache_sweeper”…
He visto también en el tutorial de Rails Envy [1] que los sweepers los
ponen en app/sweepers, pero creo que lo suyo ahora es colocarlos en
app/models.
Por otro lado, en CodeLevy [2] dicen que si solo quieres observar a
nivel de modelo para que se active el sweeper, no te hace falta
especificar nada a nivel de controlador y basta con colocar esto en
config/environment.rb:
config.active_record.observers = :plant_sweeper
Pero si hago eso, directamente la aplicación no arranca, con este mensaje:
#######################################
** Starting Rails with development environment…
Exiting
/usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:263:in
load_missing_constant': uninitialized constant ActionController::Caching::Sweeper (NameError) from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in
const_missing’
#######################################
¿Qué puede estar pasando? ¿Tendré mal instaladas las dependencias y
por eso da ese NameError?
Gracias!
[1] http://www.railsenvy.com/2007/2/28/rails-caching-tutorial#sweepers
[2]
http://codelevy.com/articles/2008/03/04/rails-caching-sweepers-controllers-and-models