Rails: 缓存['store', Product.latest]函数在片段缓存中有什么作用?

Rails: what does cache['store', Product.latest] function do in fragment cache?

我正在关注一本名为 Agile Web Development With Rails 4 的书,我在理解 cache ['store', Product.latest] 在查看文件。

#static function latest is defined in the model
def self.latest
  Product.order(:updated_at).last
end

#here is my view file

<% cache['store',Product.latest] do %>
 <% @products.each do|product| %>
  <% cache['entry',product] do %>
     <div class="entry">
      <%= image_tag(product.image_url) %>
      <h3><%= product.title %></h3>
      <%= sanitize(product.description) %>
      <div class="price_line">
       <span class="price"><%= number_to_currency(product.price) %></span>
      </div>
    </div>
  <% end %>
 <% end %>
<% end %>

cache(key) { ... } helper 执行块的内容,并使用给定的键将结果缓存一定时间。

文档详细解释了所有各种选项和功能。

在您的例子中,['store',Product.latest] 是构建缓存键名称的参数。连接数组中的项目以生成类似于 store/products/100-20140101-163830String,然后将其用作缓存键来存储块的结果。

之所以将 Product.latest 作为缓存键的参数传递,是为了确保片段在新产品添加到数据库后立即过期。这种方法通常称为基于密钥的过期模型。