当我们使用分页时,如何清除所有页面的缓存

时间:2013-04-16 11:56:00

标签: ruby-on-rails memcached dalli

我们使用dalli gem w / memcached。以下代码缓存跨多个页面分页的Foo对象。当我们处于特定页面(例如2或10或15)时,我们能够缓存Foo(s)。但是当我在第15页修改Foo时(比如说Foo-150),我们使用FooSweeper中的方法清除所有对象的缓存。当上面调用after_save方法时  操作会发生,但不会清除所有页面的缓存并反映所请求页面的旧值。

下面给出的代码段是否有任何错误。

我的控制器看起来像这样..

class FooController 

...
  caches_action :index, cache_path: proc { |c| c.params.except(:_).merge(format: request.format) }

...

我的扫地机代码看起来像这样..

class FooSweeper < ActionController::Caching::Sweeper
  observe :foo

  def after_save(foo)
    expire_cache(foo)
  end

  def before_destroy(foo)
    expire_cache(foo)
  end

  def expire_cache(foo)
    expire_action(:controller => 'foos', :action => 'index')
    expire_action(:controller => 'foos', :action => 'index', :format => 'text/html')
  end
end

1 个答案:

答案 0 :(得分:0)

你的控制器是calles Foo,但你打电话给控制器:来自你的清扫车的'foos'。这可能是您的缓存未正确清除的原因。

您可以通过将foos更改为foo来解决此问题。