5

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

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

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

4

3 回答 3

7

您可能应该考虑另一种方法。模型不应该关心缓存是如何工作的,传统上,整个清扫器方法往往变得复杂、笨拙并且与其余代码不同步。

基本上,您永远不必手动使片段过期。相反,您在模型更新后更改缓存键/url(这样您就有了新版本的新缓存条目)。

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

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

于 2013-04-29T09:03:49.687 回答
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
于 2013-04-29T08:33:37.860 回答
2

expire_fragment 不起作用,因为您没有将摘要添加到密钥中。在此处查看 DHH:https ://github.com/rails/cache_digests/issues/35

我已经发布了有关缓存 json 响应的相关答案:https ://stackoverflow.com/a/23783119/252799

于 2014-05-21T12:29:41.117 回答