我正在使用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
字符串前缀。
答案 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)