Могут ли подметальные машины Rails работать в разных контроллерах?

StackOverflow https://stackoverflow.com/questions/4505643

  •  12-10-2019
  •  | 
  •  

Вопрос

У меня есть кэширование действий, работающее над моим индексом сайтов, и я настраиваю щипца сайта, который работает нормально:

# 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

Но я также хочу истекать срок действия /администратора /сайтов, когда какие -либо издатели сохраняются или уничтожены. Можно ли истечь издательский индекс сайтов с чем -то подобным?

# 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

Я знаю, что могу просто позвонить срок действия истечения срока действия '/admin/sites' в различных действиях издателя. Мне просто интересно, есть ли у подметателей эту возможность (чтобы мои контроллеры были немного чище).

Это было полезно?

Решение

Одна подметалка может наблюдать за многими моделями, и любой контроллер может иметь несколько подметальных машин.

Я думаю, что вы должны изменить свою логику, чтобы использовать что -то подобное:

class SiteSweeper < ActionController::Caching::Sweeper
  observe Site, Publisher
  (…)
end

На PublishersController

  cache_sweeper :site_sweeper, :admin_sweeper

Таким образом, вы не повторяете логику очистки /администратора /сайта. Назовите это Admin Sweeper, поэтому, когда что -то пойдет не так, вы знаете единственное место, которое истекло действие «/Admin/Sites».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top