在查看代码更改时使缓存条目无效的好方法?

时间:2012-10-16 10:42:09

标签: ruby-on-rails caching

我正在使用Rails 3.2并在更改一段视图代码时寻找可靠的缓存条目。在这个article中,我看到37signals为缓存键添加了一个版本字符串,每次视图代码更改时都会更改。

例如,如果我将All my...更改为My...

<%= cache ["v1", project] do %>
  <p>All my todo lists:</p>
  [...]
<% end %>

我会通过将v1更改为v2

来确保缓存条目无效
<%= cache ["v2", project] do %>
  <p>My todo lists:</p>
  [...]
<% end %>

有更可靠的方法来实现这一目标吗?我担心在更改从缓存块内部调用的部分或辅助代码时,我们会忘记更新那些vX字符串前缀。

3 个答案:

答案 0 :(得分:1)

您可以使用cache_digest。它完全符合您的需要:在视图更改时自动使缓存片段无效。这样您就不需要手动跟踪每个视图版本。

答案 1 :(得分:0)

您实际上不需要手动执行此操作。我不确定是哪个版本的Rails引入了此功能,但是当您使用cache视图助手时,它会包含您正在渲染的视图的摘要,以便如果视图发生更改,它将使缓存无效。您可以查看Rails docs on fragment caching以获得更多信息。

答案 2 :(得分:-1)

<%= cahe ['todo', project] do %>
.
.

在控制器中,更新后

def update
.
.
if @project.update_attributes(params[:project)
  expire_fragment ['todo', @project] 
  render 'something'

在我的系统中,我可以在日志中看到 在报告显示上写片段视图/ show / reports / 46-20121016112032(3.0ms) 下一个回复
阅读片段视图/ show / reports / 46-20121016112032(0.2ms)
结束报告#update
过期片段视图/ show / reports / 46-20121016064919(1.2ms)