我知道缓存部分的唯一方法是(通常)
<% 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 %>
但我很懒,所以 - 在这里寻找一些乐趣...
答案 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 :该缓存唯一的缓存密钥。