我正在使用acts_as_category插件来管理我的类别逻辑。在网站的几乎每个页面中都会显示类别和子类别树:
<div id="categories_">
<% Category.roots.each do |category| %>
<h3><%= category.name %></h3>
<div>
<ul class="subcat">
<% category.children.each do |subcategory| %>
<li><%= link_to subcategory.name, "/category/#{subcategory.to_param}" %></li>
<% end %>
</ul>
</div>
<% end %>
</div>
它会生成日志文件中显示的大量SQL查询,有没有办法在单个查询中获取多行?
修改
我尝试使用相同的结果重写Category模型中的根范围:
named_scope :roots,
:conditions => ["((hidden IS NULL OR hidden = 0) AND (parent_id IS NULL))"],
:include => :children
修改
似乎问题出在插件上,作者在此解释(http://goo.gl/MwRSJ)为什么无法更改。 管理我的类别的任何其他建议?我已经使用过acts_as_tree,但它看起来有点过时了。谢谢!。
答案 0 :(得分:1)
您所看到的是由eager loading associations解决的N + 1查询问题。
<% Category.roots(:include => :children).each do |category| %>