2011-08-16 4 views
0

어. 오늘은 내 날이 아니야.레일즈 expire_action in observer?

나는 내가 지켜 클래스 중 하나의 갱신을하고 after_update가 호출지고 우리의 레일 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 

에 관찰자가 있지만, 그것은 아무것도 만료되지 않습니다. 로그에 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가 있는지보고 싶어하는 줄을 추측한다.