Rails: кеш фрагментов, как обновить, когда старые данные не совпадают с новыми - PullRequest
0 голосов
/ 13 июля 2020

Проблема в том, что у меня есть вызов функции внутри фрагмента кеша, который зависит от текущего времени и загружает правильные данные в первый раз, но не всегда. Некоторые данные, которые мне нужно показать, зависят от времени, но из-за использования кеша он просто загружает старые данные, поскольку запись не обновляется. Любая идея, как я могу это сделать, все еще используя кеш.

<% cache "shop_items_page_#{@shop.cache_key}" do %>
 ...
   <% cache "item_list_page_#{item.cache_key}_#{shop_cache(item)}" do %>
     ...
     is_item_closed?(item) #a function returns true or false based on time
     ...
   <%end%>
 ...
<%end%>

1 Ответ

0 голосов
/ 13 июля 2020

Согласно документации , вы можете передать экземпляр модели методу cache: cache @shop и cache item. Затем Rails создаст ключ кеша на основе полей updated_at, убедитесь, что у вас есть это поле в ваших таблицах. Если вам строго нужно использовать настраиваемые ключи кеша, добавьте updated_at прямо в представление или внутри cache_key методов.

<% cache "shop_items_page_#{@shop.cache_key}_#{@shop.updated_at}" do %>
 ...
   <% cache "item_list_page_#{item.cache_key}_#{item.updated_at}_#{shop_cache(item)}" do %>
     ...
     is_item_closed?(item) #a function returns true or false based on time
     ...
   <%end%>
 ...
<%end%>
...