在我的索引中,我致电
<% 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,底部也会缓存。还有吗?它会以相反的方式工作吗?
答案 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 %>