ruby-on-railscachingdevisefragment-caching

Cannot expire cached fragment by default methods in Ruby on Rails + Devise


I'm using Devise as authenticating solution in Rails and I have a cached fragment :recent_users.

I want this fragment to expire when a new user is registered, changed or removed, so I put in my(manually created) users_controller.rb

class UsersController < ApplicationController
    cache_sweeper :user_sweeper, :only => [:create, :update, :destroy]
...

But my fragment does not expire when new creates or changes.

My user_sweeper contains basic prescriptions

class UserSweeper < ActionController::Caching::Sweeper
observe User

def after_save(user)
   expire_cache(user)
end

def after_destroy(user)
  expire_cache(user)
end

private
  def expire_cache(user)
    expire_fragment :recent_users
  end
end

What am I doing wrong?


Solution

  • Problem solved!

    I followed this steps and everything works:

    $ mkdir app/controllers/users
    $ touch app/controllers/users/registrations_controller.rb
    

    In registrations_controller.rb

    class Users::RegistrationsController < Devise::RegistrationsController
      cache_sweeper :user_sweeper, :only => [:create, :update, :destroy]    
    end
    

    Problem was that Registrations in Devise is a separate controller.