render_component icon indicating copy to clipboard operation
render_component copied to clipboard

Problem with sweepers

Open MartinKoerner opened this issue 14 years ago • 1 comments

Hi,

I discovered this error with ActiveScaffold: If you have sweepers activated, you will get a NoMethodError, because Sweepers after action is called twice. First time, it sets self.controller = nil, so second time it fails to get controller_name.

This behaviour is mentioned in http://dev.rubyonrails.org/ticket/6199, but since components were removed from rails it was never fixed there...

MartinKoerner avatar Mar 30 '10 09:03 MartinKoerner

Fixed it with following monkey patch (I changed the suggested patch a little bit):

module ActionController
  module Caching
    class Sweeper < ActiveRecord::Observer
      attr_accessor :controller

      def initialize
        @controller_stack = []
        super
      end

      def before(controller)
        @controller_stack << controller
        self.controller = controller
        callback(:before) if controller.perform_caching
      end

      def after(controller)
        callback(:after) if controller.perform_caching
        @controller_stack.pop
        self.controller = @controller_stack.last
      end
    end
  end
end

So all Sweepers are saving all calling controllers instead of only one...

MartinKoerner avatar Mar 30 '10 12:03 MartinKoerner