1

这个让我难住了。

我有一个缓存片段的视图:

 - cache :key=>"news" do    
   %h2 News
   - etc

我有一台扫地机,它使用:

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment(:key => "news") 
end

清扫器被称为,因为我可以在控制台输出中看到“expire_home_cache”。

但是片段没有更新......

有任何想法吗?

4

4 回答 4

4

尝试替换expire_fragment(:key => "news")ActionController::Base.new.expire_fragment(:key => "news")

没有时间解释,但它对我有用。

于 2009-05-29T00:00:56.213 回答
2

你可以试试这个:

   cache("news") do    
     %h2 News
     - etc
   end

和...

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment("news") 
end

...或者试试这个...

 - cache({:key=>"news"}) do    
   %h2 News
   - etc

我认为问题可能是 ruby​​ 或 rails 很难确定密钥到底是什么,因此缓存方法和 expire_fragment 正在生成两个不同的缓存密钥。

于 2009-05-22T14:44:40.047 回答
1

正确的方法是:

cache :news do

  ...
end

然后在你的扫地机中:

expire_fragment :news
于 2009-07-27T15:25:42.053 回答
0

这并不能直接回答您的问题,但是您是否尝试过 timed_fragment_cache 插件作为替代方案?

http://github.com/tricycle/timed_fragment_cache/tree/master

我发现这是在我的项目中使片段过期的一种更简单的方法。

于 2009-07-17T23:49:25.580 回答