Я думаю, что ваша подметальная машина должна выглядеть так:
class ProductSweeper < ActionController::Caching::Sweeper
observe Product
def after_save(product)
expire_cache(product)
end
def after_destroy(product)
expire_cache(product)
end
private
def expire_cache(product)
expire_fragment('all_available_products')
expire_page(:controller => 'products', :action => 'index')
end
after_index
не является обратным вызовом, если вы его не определите.
В контроллере вы должны указать те действия, в которых должен запускаться уборщик, в спокойном виде эти действия должны быть create, update, destroy
, поэтому объявление вашего контроллера должно выглядеть так:
class ProductsController < ActionController
caches_action :index
cache_sweeper :product_sweeper, :only => [:create, :update, :destroy]
def index
@products = Product.all
end
def create
@product = Product.new(params[:product])
if @product.save # triggers the sweeper.
# do something
else
# do something else
end
end
# update and stuff ...
end
Надеюсь, это вам поможет!