我有以下问题:
我有一个Products的索引控制器,索引控制器可以有无穷无尽的查询字符串组合,即。
/products?category=5&color=6
现在,通过使用params作为关键字来存储所有这些是很容易的:
caches_action :index, :cache_path => Proc.new { |c| c.params }
当您需要在添加,删除或更改产品时清除所有索引缓存时,会出现此问题。据我所知,您需要知道使缓存对象到期的密钥。你不能在清扫车里做类似的事情:
def after_update(product)
expire_action(product, :all)
end
我已经研究了缓存标记了一下,但是无法获得我看过的Gems做我需要的东西,或者实际上让它们完全正常工作。我看到的那些宝石是Cashier和Rails-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)
然后在sweeper文件中使用以下内容:
cache.delete_tag "products"
但这没有用 - 它没有清除缓存。做我正在做的事情的正确方法是什么?