Rails: 有条件地绕过片段缓存

Rails: Conditionally bypass fragment caching

有什么方法可以使片段缓存有条件,例如这将始终缓存:

 <% cache :calculation do %>
   <%= calc(x) %>
 <% end %>

但是如果例如x > 5,类似于:

 <% cache :calculation, { if: (x > 5) } do %>
   <%= calc(x) %>
 <% end %>

当然也可以通过if-then语句,提取缓存内容函数来完成,但那样比较麻烦。可能通过在这种情况下将 ttl 设置为零来工作,但我怀疑这仍然会将项目放入缓存中,这被浪费了 space.

你试过了吗cache_if

<% cache_if((x > 5), :calculation) do %>
  <%= calc(x) %>
<% end %>