caches_action :index for site root gets propagated to lower levels (how to stop?)

Hello all,

I am running a blog system which has its "/" (home page) cached like this:

class ApplicationController < ActionController::Base   before_filter :index_cache_expirer, :only => [:index]   caches_action :index

so the site's top page is caches for 60 seconds in my case (index_cache_expirer is a home-made function to expire)

on the site, there is also a multi-user /admin area, which in turn has its own controllers with :index action.

The problem is that effect of "caches_action :index" directive, which is set inside the application.rb, somehow gets propagated to, say, :index action of admin/posts controller, which causes problems because a user is sometimes served by a page, which was cached by another user! (like, logging in and checking his own posts list, just to be served by a cached posts list, which was created for another user)

I might not be doing the caching the right way or something, but is there a way to turn off that caches_action directive propagation to "lower" level of the site (i.e. just make it work ONLY for the application controller's :index action, where it was defined in?)

Any suggestions are very appreciated as my site is now running with caching off while I'm trying to find a good solution for the problem.

TIA, Mike

Hello all,

I am running a blog system which has its "/" (home page) cached like this:

class ApplicationController < ActionController::Base before_filter :index_cache_expirer, :only => [:index] caches_action :index

so the site's top page is caches for 60 seconds in my case (index_cache_expirer is a home-made function to expire)

on the site, there is also a multi-user /admin area, which in turn has its own controllers with :index action.

The problem is that effect of "caches_action :index" directive, which is set inside the application.rb, somehow gets propagated to, say, :index action of admin/posts controller, which causes problems because a user is sometimes served by a page, which was cached by another user! (like, logging in and checking his own posts list, just to be served by a cached posts list, which was created for another user)

I might not be doing the caching the right way or something, but is there a way to turn off that caches_action directive propagation to "lower" level of the site (i.e. just make it work ONLY for the application controller's :index action, where it was defined in?)

Any suggestions are very appreciated as my site is now running with caching off while I'm trying to find a good solution for the problem.

Well, *every* controller you have inherits from ApplicationController (see the "class" line at the top). So by putting this into ApplicationController you're telling it to apply to *every* controller's index action.

Move that caches_action line out of ApplicationController and put it into whatever controller serves up your home page.

-philip

Philip, thank you very much! Indeed! Somehow I just didn't happen to think about this inheritancy as the source of the problem! Now thinking about it, it is almost a miracle I didn't have more problems with the program, since I have put pretty alot of various stuff inside the ApplicationController. Got to rebuild my app's structure a little I guess.

Thanks again! Mike.