рельсы expire_action в наблюдателе? - PullRequest
0 голосов
/ 16 августа 2011

Тьфу. Сегодня не мой день.

У меня есть наблюдатель в нашем приложении 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

Значит, это удар по этому коду, а не бомбардировка.

Я хочу использовать наблюдателя, потому что эти модели обновляются не из контроллера, а изнутри.

1 Ответ

1 голос
/ 16 августа 2011

После некоторого троллинга вокруг я нашел ответ. Я добавил эту строку в начало моего метода after_update:

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

Вы не получите никаких исключений, но без этого это не сработает. Я предполагаю, что где-то внизу он ищет, присутствует ли @controller, и если да, то делают что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...