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