gpt4 book ai didi

ruby-on-rails-3 - Rails 4.0.0.0 俄罗斯娃娃缓存与belongs_to 模型

转载 作者:行者123 更新时间:2023-12-03 23:38:08 25 4
gpt4 key购买 nike

我已经在我的模型中设置了一个缓存

def self.latest(shop_id)
Inventory.where(:shop_id => shop_id).order(:updated_at).last
end

在我看来
<% cache ['inventories', Inventory.latest(session[:shop_id])] do %>

<% @inventories.each do |inventory| %>

<% cache ['entry', inventory] do %>

<li><%= link_to inventory.item_name, inventory %></li>

所以,在这里我可以有很多商店,每个商店都有库存元素。上述缓存是否适用于不同的商店?

我认为即使在不同的商店中显示 View 也可能会破坏缓存。或者,任何添加库存项目的商店都会破坏缓存。

我可以像这样使用俄罗斯娃娃缓存还是需要在我的模型中使用 Inventory.all ?

最佳答案

你的想法很接近,但你需要包括 shop_id , count ,最大updated_at每个商店的库存到您的缓存键。当商店的商品也被删除时,您的外部缓存也需要被破坏,这不在最大 id 范围内。或 updated_at独自的。

您可以扩展您的自定义缓存键辅助方法来完成这项工作。这允许您创建唯一的顶级缓存,只有在该集合的成员被添加、更新或删除时才会被破坏。实际上,这为每个 shop_id 提供了唯一的外部缓存。 .因此,当一家商店的库存发生变化时,不会影响另一家商店的缓存。

这是一个示例,基于 edge rails documentation 中的想法:

module InventoriesHelper
def cache_key_for_inventories(shop_id)
count = Inventory.where(:shop_id => shop_id).count
max_updated_at = Inventory.where(:shop_id => shop_id).maximum(:updated_at).try(:utc).try(:to_s, :number)
"inventories/#{shop_id}-#{count}-#{max_updated_at}"
end
end

那么在你看来:
<% cache(cache_key_for_inventories(session[:shop_id])) do %>
...
<% end %>

关于ruby-on-rails-3 - Rails 4.0.0.0 俄罗斯娃娃缓存与belongs_to 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com