【发布时间】:2020-11-02 15:10:00
【问题描述】:
问题是我在缓存片段中有一个函数调用,它依赖于当前时间,它第一次加载正确的数据,但并非总是如此。我需要显示的一些数据是基于时间的,但由于使用了缓存,它只是加载旧数据,因为记录没有更新。知道如何在仍然使用缓存的同时做到这一点。
<% 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%>
【问题讨论】:
-
@show和item是 ActiveRecord 模型的实例吗? -
@Yakov 是的,它们是 ActiveRecord 模型的实例。
-
请告诉我们
is_item_closed?做了什么。如果它是使用Time.now的东西,它将不起作用。如果缓存块中的内容取决于模型之外的更改,在您的情况下,您需要将这些内容添加到缓存键中。例如:cache [:item_list_page, item, Date.current] do -
@razvans yes
is_item_closed?依赖于Time.now,它检查Time.now和item.end_time。对我有帮助的是在缓存行<% cache "shop_items_page_#{@shop.cache_key}#{get_status_code(@shop)}" do %>和<% cache "item_list_page_#{item.cache_key}_#{shop_cache(item)}#{get_status_code(item)}" do %>中附加一个 uniq 值以生成新密钥
标签: ruby-on-rails ruby caching server memcached