1

我有以下问题:

我有一个产品的索引控制器,索引控制器可以有无限的查询字符串组合,即。

/products?category=5&color=6

现在,通过使用参数作为键来存储所有这些已经很容易了:

caches_action :index, :cache_path => Proc.new { |c| c.params }

当您需要在添加、删除或更改产品时清除所有索引缓存时,就会出现问题。据我所知,您需要知道使缓存对象过期的密钥。您不能在扫地机中执行以下操作:

def after_update(product)
   expire_action(product, :all)
end

我对缓存标记进行了一些研究,但无法让我看到的 Gems 做我需要的工作,或者根本无法让它们工作。我看到的宝石是CashierRails-Cache-Tags。我尝试使用 Cashier 执行以下操作:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tag => "products"

并在清扫器文件中使用:

Cashier.expire "products"

但是在尝试使用 Cashier 进行任何操作时,会出现以下错误:

uninitialized class variable @@adapter in Cashier

使用 rails-cache-tags 我尝试执行以下操作:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tags => %w(products)

然后在清扫器文件中使用以下内容:

cache.delete_tag "products"

但这不起作用——它没有清除缓存。做我想做的事情的正确方法是什么?

4

1 回答 1

0

您可以调用expire_fragmentwhich 可以将 aRegexp作为参数:

将删除任何匹配的片段,因此%r{pages/\d*/notes}可能会删除所有注释。

于 2012-10-30T16:33:39.517 回答