我想在 Rails 视图中测试缓存过期。视图如下所示:
# products/index.html.erb
<% @products.each do |product| %>
<% cache product do %>
<%= render product %>
<% end %>
<% end %>
产品的部分呈现链接到产品的所有者、项目、类别、标签等。每次更新产品或链接到它的对象时,我都会使产品的缓存过期
有几种方法可以测试产品的缓存过期:
- 模型规格:在更新产品或链接对象时测试产品
cache_version
是否正在更改 - 查看规范:测试新属性是否在产品的索引模板中呈现
- 请求规范:测试响应正文中是否返回了新属性
cache_version
产品模型如下所示:
def cache_version
[touched_at, updated_at].compact.map(&:utc).max.to_s(:usec)
end
问题#1
是有人可以更改产品部分,因此它不会使用cache_version
方法。例如,从 rails 升级5.1
到5.2
缓存机制后已更改为使用cache_version
而不是cache_key
如果有人变了怎么办
你会选择哪种方式来测试缓存过期,为什么?