Могут ли рельсы подметать на разных контроллерах?
У меня есть кэширование действий, работающее с моим индексом сайтов, и я настроил SiteSweeper, который работает нормально:
# app/controllers/admin/sites_controller.rb
class Admin::SitesController < Admin::BaseController
cache_sweeper :site_sweeper, :only => [:create, :update, :destroy]
caches_action :index, :cache_path => '/admin/sites'
...
# app/sweepers/site_sweeper.rb
class SiteSweeper < ActionController::Caching::Sweeper
observe Site
def after_save(site)
expire_cache(site)
end
def after_destroy(site)
expire_cache(site)
end
def expire_cache(site)
expire_action '/admin/sites'
end
end
Но я также хочу, чтобы истек срок действия /admin/sites, когда бы ни были опубликованы или уничтожены любые издатели. Возможно ли, чтобы PublisherSweeper истек индекс сайтов таким образом?
# app/sweepers/publisher_sweeper.rb
class PublisherSweeper < ActionController::Caching::Sweeper
observe Publisher
def after_save(publisher)
expire_cache(publisher)
end
def after_destroy(publisher)
expire_cache(publisher)
end
def expire_cache(publisher)
expire_action '/admin/sites'
end
end
Я знаю, что могу просто вызвать expire_action '/admin/sites' в рамках различных действий Publisher. Мне просто интересно, есть ли у подметальных машин такая возможность (чтобы мои контроллеры были немного чище).
1 ответ
Один уборщик может наблюдать много моделей, а любой контроллер может иметь несколько уборщиков.
Я думаю, что вы должны изменить свою логику, чтобы использовать что-то вроде этого:
class SiteSweeper < ActionController::Caching::Sweeper
observe Site, Publisher
(…)
end
На издателяхКонтроллер
cache_sweeper :site_sweeper, :admin_sweeper
Таким образом, вы не повторяете логику очистки / admin / сайта. Назовите его AdminSweeper, поэтому, когда что-то идет не так, вы знаете единственное место, в котором истекло действие "/ admin / sites".