【问题标题】:optimize the query using acts-as-taggable-on rubygem使用作为可标记的 ruby​​gem 优化查询
【发布时间】:2013-02-26 22:56:19
【问题描述】:

我在我的项目中使用acts-as-taggable-on gem。但是,加载所有标签大约需要 80 秒。

我在 run_controller 中添加了预加载,但它不起作用。 这是一段代码:

def index
  @runs = Measurement.includes(:tags).order( "run_name DESC" ).group( :run_name )#.descending #.order_by( :run => 'desc' )
  respond_to do |format|
    format.html # index.html.erb
    format.json  { render :json => @runs }
  end
end

我正在使用acts-as-taggable-on 支持的tag_list 来显示标签。因此,在 Measurements 上使用预先加载对性能没有影响。以下两个是stackflow中的相关问题: 1. acts_as_taggable_on: how to optimize the query? 2. Optimizing queries with acts_as_taggable_on

我查看了日志文件,发现最耗时的部分是加载标签,比如

ActsAsTaggableOn::Tag Load (69.9ms) SELECT tags.* FROM tags INNER JOIN taggings ON tags.id = taggings.tag_id WHERE @987654321.@9876543233 @ = 223866 AND taggings.taggable_type = 'Measurement' AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL)

ActsAsTaggableOn::Tag Load (70.2ms) SELECT tags.* FROM tags INNER JOIN taggings ON tags.id = taggings.tag_id WHERE taggable_id987654332 @ = 223854 AND taggings.taggable_type = '测量' AND (taggings.context = 'tags'

它有数千个查询来加载标签,每个查询花费大约 0.07 秒。 以下代码用于显示标签。

= form_for (run), :remote => true, :method => :put,  :html => { :class => "myform"} do |f|
  =f.text_field :tag_list, :class => "tags"

有什么帮助吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby optimization acts-as-taggable-on taglist


    【解决方案1】:

    我今天才发现这个。只要不使用tag_list 方法,就可以通过tags 关联进行预加载。

    提到herehere

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多