是否可以在每个视图/部分中没有显式缓存块定义的情况下以某种方式缓存部分?

时间:2018-06-11 21:45:08

标签: ruby-on-rails

我知道缓存部分的唯一方法是(通常)

<% cache do %>
   <div> partial content </div>
<% end %>

但我正在寻找一个解决方案(宝石,猴子修补,......,任何合理的东西),当我可以动态定义我想要在控制器端或部分定义期间缓存的内容时, 例如:

# some controller

render 'expensive_view', cache_if: some_custom_logic_for_true_or_false

# or view

<%= render partial: 'expensive_partial', cache_if: some_custom_logic_for_true_or_false %>

事实上,我有很多(~100)部分看起来像这样

# current partial content

<div> partial content </div>

并且每个都可以缓存或不缓存,具体取决于运行时业务逻辑。

无聊的方式是用这样的东西重构每个视图:

<% cache_if some_custom_logic_for_true_or_false do %>
   <div> partial content </div>
<% end %>

但我很懒,所以 - 在这里寻找一些乐趣...

1 个答案:

答案 0 :(得分:-1)

<强> view1.html.erb

<%=render partial: 'caching_partial', locals: {condition: value, partial_name: 'partial_name', cache_key: 'cache_key'}%>

<强> _caching_partial.html.erb

if condition
<% cache 'cache_key' do %>
  <%=render partial: "#{partial_name}"%>
<% end %>
else
 <%=render partial: "#{partial_name}"%>

条件:根据您的情况可以是任何有效条件

partial_name :将是需要/不需要缓存的实际部分

cache_key :该缓存唯一的缓存密钥。