是否可以在rails视图中为所有相同的查询使用缓存?

时间:2016-12-07 04:12:04

标签: ruby-on-rails ruby-on-rails-4

在我的索引中,我致电

<% Shoes.roots.each do |shoe| %>
    <%= link_to shoe.shoe_name, shoe %>
<% end %>

我有一些HTML组织页面,后来打电话:

<% Shoe.roots.each do |shoe| %>    
  <%= link_to shoe.shoe_name, shoe %>
  <%= shoe.shoe_size %>
<% end %> 

提供一些链接和鞋码。

我正在使用rack-mini-profiler,它告诉我我没有做两个单独的查询。如果我缓存顶部.each:

<% Shoes.roots.each do |shoe| %>
  <% cache(shoe) do %>
    <%= link_to shoe.shoe_name, shoe %>
  <% end %>
<% end %>

即使我不在顶部使用shoe.shoe_size,底部也会缓存。还有吗?它会以相反的方式工作吗?

1 个答案:

答案 0 :(得分:1)

Rails确实缓存了SQL查询。如果查询在同一请求中相同,则不会再次执行相同的请求。

您应该考虑将鞋子分配给控制器中的实例变量:

@roots = Shoe.roots

然后在视图中访问该变量

<% @roots.each do |shoe| %>
    <%= link_to shoe.shoe_name, shoe %>
<% end %>

<% @roots.each do |shoe| %>    
  <%= link_to shoe.shoe_name, shoe %>
  <%= shoe.shoe_size %>
<% end %>