acts_as_taggable_on:如何优化查询?

时间:2011-10-15 09:48:11

标签: ruby-on-rails activerecord acts-as-taggable-on

我在当前的Rails项目中使用acts_as_taggable_on。在一个概述页面上,我显示了一个带有相关标签的对象索引。我使用以下代码:

class Project < ActiveRecord::Base
  acts_as_taggable_on :categories
end

class ProjectsController < ApplicationController
  def index
    @projects = Project.all
  end
end

# in the view
<% @projects.each do |p| %>
   <%= p.name %>
   <% p.category_list.each do |t| %>
     <%= t %>
   <% end %>
<% end %>

这一切都按预期工作。但是,如果我显示20个项目,acts_as_taggable_on将触发20个查询以获取关联的标记。

如何在原始数据库查询中包含标记的加载?

谢谢你的时间。

3 个答案:

答案 0 :(得分:13)

尝试

@projects = Project.includes(:categories).all

答案 1 :(得分:2)

我同意Jan Drewniak的观点,

提升了巨大的表现
Download.includes(:tags).all

和观点:

download.tags.map {|t| link_to t, t.name}.join(', ')

但仍然太慢。

还有其他想法吗?

答案 2 :(得分:1)

使用此:

Post.includes(:标签)。所有

然后:

post.tags.collect {| t | t.name}