Rails从模型中过期片段缓存

我正在使用我的Rails项目中的缓存,并希望使特定URL的缓存失效。 我得到以下命令来过期对应于传递的URL的片段:

ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/") 

我很困惑将这些代码放在我的Rails项目中,以便在添加文本字段中的url并单击expire按钮后立即执行。

您应该考虑采用不同的方法。 模型不应该关注缓存是如何工作的,传统上整个清理器方法往往变得复杂,笨拙并且与其余代码不同步。

基本上,您永远不必手动使片段过期。 而是在更新模型后更改缓存键/ URL(以便为新版本创建新的缓存条目)。

现在的常识是使用俄罗斯娃娃缓存方法。 该链接指向一篇解释基础知识的文章,即将推出的Rails 4将包含更好的支持 。

这可能是大多数标准Rails应用程序的最佳方式。

ActionController::Caching::Sweeper是一个很好的方法,它是Rails观察者的一部分。

http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

 class MyModelSweeper < ActionController::Caching::Sweeper observe MyModel def after_save(object) expire_fragment('...') end end 

expire_fragment将不起作用,因为您没有将摘要添加到密钥。 请参阅DHH: https : //github.com/rails/cache_digests/issues/35

我发布了一个关于缓存json响应的相关答案: https : //stackoverflow.com/a/23783119/252799