唉。不是我今天的日子。
我在Rails 3.0x应用程序中有一个观察者
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是否存在,如果有的话。