2011-08-16 61 views
0

呃。今天不是我的一天。在观察员的rails expire_action?

我有一个观察者在我们的Rails应用程序3.0倍

class EventObserver < ActionController::Caching::Sweeper 
    observe :live_event, :event 

    def after_update(event) 
    Rails.logger.debug "EventObserver::after_update #{event.class.name}.#{event.id}" 
    channels = Channel.being_used 
    inc=channels.reject {|c| !c.current_source.events.include?(event) } 
    inc.each do |c| 
     expire_action("channel_tickers/#{c.id}.js") 
     expire_action("channel_events/#{c.id}.js") 
     Rails.logger.debug "expired stuff for channel #{c.id}" 
    end 
    end 
end 

我做的看着类之一的更新和after_update获取调用,但它没有到期任何东西。我在日志中看不到对expire_action的调用。

我确实看到:

expired stuff for channel 63 

所以它打的是代码,而不是轰炸出来。

我想使用观察者,因为这些模型不是从控制器更新的,而是从内部更新的。

+0

你从哪里进行更新? –

回答

1

经过一番徘徊后,我找到了答案。我加入这行我“after_update”方法的开头:

@controller ||= ActionController::Base.new # <= this line is the key! without this nothing works 

你会得到没有异常,但没有这一点,是行不通的。我猜想它正在寻找是否存在@controller,如果是的话。