8

我在我的应用程序中使动作缓存过期时遇到了一些问题。

这是我的控制器:

class ToplistsController < ApplicationController
  caches_action :songs, cache_path: :custom_cache_path.to_proc

  def custom_cache_path
    "#{params[:when]}-#{params[:what]}-#{params[:controller]}-#{params[:action]}"
  end

  def songs
    # ...
  end  
end

我不知何故需要能够重置自定义缓存路径,但我不知道如何。

我已经尝试过使用这种技术,但没有成功。看起来我的缓存引擎 Dalli 不支持正则表达式匹配器。

尝试使用此代码时出现此错误:

expire_fragment(/songs/)

ActiveSupport::Cache::DalliStore does not support delete_matched

我尝试使用这行代码进行调试,但它被忽略了。

before_filter only: [:songs] 
  expire_fragment(custom_cache_path)
end

我正在使用 Rails 3.1.0.rc6、Dalli 1.0.5 和 Ruby 1.9.2。

4

2 回答 2

0

您可能还想在此处查看解决方案。使用他的方法,您可以使用额外参数使操作过期。

于 2012-02-06T07:09:46.477 回答
0

由于动作缓存,该before_filter块被忽略。
解决方案是改用片段缓存。

# Controller
class ToplistsController < ApplicationController
  helper_method :custom_cache_path

  before_filter only: [:songs]
    if params[:reset_cache]
      expire_fragment(custom_cache_path)
    end
  end

  def custom_cache_path
    "#{params[:when]}-#{params[:what]}-#{params[:controller]}-#{params[:action]}"
  end

  def songs
    # ...
  end  
end

# View

<%= cache custom_cache_path do %>
  Content that should be cached
<% end %>
于 2011-08-31T09:55:27.357 回答