2011-08-16 9 views
0

今日は私の一日ではありません。rails expire_action in observer?

私は、私たちの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が存在するかどうかを調べる行を推測しています。あなたからのアップデートを行いました