Как обновить кэшированное действие?

Потеря идей о том, как правильно использовать кэширование действий для контроллера косвенно в зависимости от модели.

Фоновый сценарий:

Наличие простой модели рельсов для объектов продукта

class Product < ActiveRecord::Base
  ...
end

Контроллер, который обрабатывает запросы на каналы и использует экземпляры Product для отображения представлений.

class FeedsController < ActionController::Base
  # caches index action of a controller, generates large response
  cache_action :index

  def index
    @products = Product.all
    respond_to do |format|
      format.xml
    end
  end

  # need to clear cached `index' and fill cache again
  # PUT request is routed to `update'
  def update
    expire_action :action => :index, :format => :xml
    # ?? how call `index' again to update cache ??
    render nothing: true
  end
end

Теперь мне нужно отслеживать изменения в модели продукта, и, если обнаружены какие-либо изменения, убедитесь, что кэшированное действие из FeedsController будет признано недействительным и заполнено обновленными данными. Надеюсь, я не спрашиваю ничего экзотического.

Пока что я закончил со следующим наблюдателем:

class FeedSweeper < ActionController::Caching::Sweeper
  observe Product

  def after_update(product)
    # Not found other way than directly remove cached view
    # for FeedsController
    # No `@control' instance available here
    Rails.cache.delete_matched /feeds\/.+\.xml$/
    # How to invoke FeedsController#index from here ??
    # To fill updated data in cache
  end
end
  1. Я не могу просто отправить GET-запрос для получения некэшированного канала, потому что HTTP-сервер выдает ошибку тайм-аута, которая жестко задана до 30 секунд
  2. Я отслеживаю изменения модели продукта, поэтому нет смысла создавать обратный вызов для FeedsController, который не подключен к продукту, просто используйте его экземпляры

Любой совет, как отслеживать изменения в независимой модели и обновлять кэш для других независимых действий контроллера?

0 ответов

Другие вопросы по тегам