render_component
render_component copied to clipboard
Problem with sweepers
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...
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...