我正在使用我的Rails项目中的缓存,并希望使特定URL的缓存失效。我得到以下命令来过期对应于传递的URL的片段:
ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/")
我很困惑将此代码放在我的Rails项目中,以便在添加文本字段中的url并单击expire按钮后立即执行。
答案 0 :(得分:7)
您应该考虑采用不同的方法。模型不应该关注缓存是如何工作的,传统上整个清理器方法往往变得复杂,笨拙并与代码的其余部分不同步。
基本上,您永远不必手动使片段过期。相反,您在更新模型后更改缓存键/ URL(以便为新版本创建新的缓存条目)。
现在的常识是使用Russian Doll Caching方法。该链接指向一篇解释基础知识和即将发布的Rails 4 will contain even better support的文章。
这可能是大多数标准Rails应用程序的最佳选择。
答案 1 :(得分:3)
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
答案 2 :(得分:2)
expire_fragment无法正常工作,因为您没有将摘要添加到密钥中。请在此处查看DHH:https://github.com/rails/cache_digests/issues/35
我发布了一个关于缓存json响应的相关答案:https://stackoverflow.com/a/23783119/252799