2

我正在使用 Rails 3.2 并在更改一段视图代码时寻找可靠的使缓存条目无效的方法。在本文中,我看到 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在更改从缓存块内部调用的部分或帮助代码时,我们会忘记更新这些字符串前缀。

4

3 回答 3

1

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

于 2013-05-13T11:18:15.307 回答
0

您实际上不需要手动执行此操作。我不确定是哪个版本的 Rails 引入了这一点,但是当您使用cache视图助手时,它包含您正在呈现的视图的摘要,因此如果视图发生更改,它将使缓存无效。您可以查看有关片段缓存的 Rails 文档以获取更多信息。

于 2019-07-04T02:43:12.773 回答
-1
<%= cahe ['todo', project] do %>
.
.

在控制器中,更新后

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

在我的系统中,我可以在日志中看到
Write fragment views/show/reports/46-20121016112032 (3.0ms) on report show
next response
Read fragment views/show/reports/46-20121016112032 (0.2ms)
end on report#update
Expire片段视图/显示/报告/46-20121016064919 (1.2ms)

于 2012-10-16T11:24:26.720 回答