Rails 3使复杂的操作过期

时间:2011-05-19 10:01:37

标签: ruby-on-rails memcached

假设我在控制器中有这个:

caches_action :my_action, :cache_path => Proc.new { |c| "my_action##{c.params}" }

网址如下:

/w/:some_id/:additional_params

缓存工作得很好,但我找不到如何使它过期。

我试过了:

expire_action(:controller => '/my_controller', :action => 'my_action')

expire_fragment(/my_action/)

store = ActionController::Base.cache_store
store.delete_matched(/my_action/)

但没有一个到期我的行动。不知道是否有可能使这样的匹配动作失效?

1 个答案:

答案 0 :(得分:1)

根据Caching docs的评论,您可以添加:expires_in选项:

caches_action :my_action, :expires_in => 1.hour,
  :cache_path => Proc.new { |c| "my_action##{c.params}" }

此外,正如您所指出的,您的网址采用/w/:some_id/:additional_params格式,因此网址中没有my_action。因此,您不会将任何对象与正则表达式/my_action/匹配。

这可能会使缓存失效:

expire_fragment(%r{/w/\d+/})