Можно ли как-то кешировать частички без явного определения блока кеша в каждом представлении / частичном? - PullRequest
0 голосов
/ 12 июня 2018

Единственный способ, которым я знаю, для кэширования партиалов (в общем)

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

, но я ищу решение (gem, monkey-patching, .., что-нибудь разумное), когда я могу определить динамическичто я хочу кэшировать на стороне контроллера или во время частичного определения, например:

# 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 голосов
/ 12 июня 2018

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}"%>

условие : может быть любым действительным условием в соответствии с вашим регистром

имя_частицы : будет фактическим частичным, который необходимо / не нужно кэшировать

cache_key : ключ кеша, уникальный для этого кеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...