2016-12-07 45 views
0

在我的索引我打电话缓存是否可用于rails视图中的所有相同查询?

<% 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,它告诉我我没有做两个单独的查询。如果我缓存顶部。每个做:

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

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

回答

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 %> 
相关问题