Sweeper class doesn't work

Hi experts,

I have built a typical cache sweeper class:

#======================
class PrivilegeCacheSweeper < ActionController::Caching::Sweeper
observe User

def after_update(user)
expire_cache_for(user)
end

private

def expire_cache_for(user)
p “Hi there!!!”
expire_action(:controller => “users”, :action => “user_view”)
end
end
#======================

In the UsersController I set:
#======================
class UsersController < ApplicationController

caches_action :user_view
cache_sweeper :privilege_cache_sweeper

def user_view
#code to show list of accessible units of login user
end

def update
#update user
end
end
#======================

In environment.rb, I already set:
#======================
config.action_controller.perform_caching = true
#======================

The problem is that after the user is updated, the page “user_view” is
still cached when being refreshed (The output shows “Cached fragment
hit: views/localhost:3000/users/user_view”).

The output also shows the text “Hi there!!!” => It means method
“expire_cache_for(user)” is called. However, “expire_action()” seems not
to work at all.

I also tested the expire_action(:controller => “users”, :action =>
“user_view”) by inserting it directly in UsersController::update method.
It works fine!

Could you give me any suggestion to solve this problem?

My application runs on:

Rails: 2.3.2
Ruby: 1.8
OS: Ubuntu 8.04

Thank you very much.

Hi,

For whom may get the same problem:

I moved the sweeper declaration ‘cache_sweeper :privilege_cache_sweeper’
from UsersController to ApplicationController. And it works for me!

But I still have no idea why this change makes expire_action in cache
sweeper work.

Any explanations are welcome.

Thanks and regards,

.Viet Trung.

Viet,

I signed up today just to say you are my savior. I couldn’t figure out
why the hell my sweeper wasn’t working either.

Thanks for the working fix.

Over two years later … same problem, same fix, thanks!!
But I would also like an answer to the original question … because i
also don’t understand why it only works in the AppController

On Sun, Dec 9, 2012 at 5:33 PM, Simon K. [email protected] wrote:

Over two years later … same problem, same fix, thanks!!
But I would also like an answer to the original question … because i
also don’t understand why it only works in the AppController

-ENOCONTEXT