Rails从模型中过期片段缓存

时间:2013-04-29 08:08:13

标签: ruby-on-rails caching

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

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

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

3 个答案:

答案 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