2

我们使用带有 memcached 的 dalli gem。以下代码缓存跨多个页面分页的 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
4

1 回答 1

0

您的控制器称为 Foo,但您从清扫器中调用控制器:'foos'。这可能是您的缓存未正确清除的原因。

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

于 2013-06-01T21:51:58.857 回答