upload tags report: fix N+1 queries issues.

This commit is contained in:
evazion
2017-03-30 13:09:56 -05:00
committed by r888888888
parent 765fbac11d
commit 964197d403
3 changed files with 9 additions and 12 deletions

View File

@@ -21,6 +21,6 @@ class ReportsController < ApplicationController
def upload_tags
@user = User.find(params[:user_id])
@upload_reports = Reports::UploadTags.for_user(params[:user_id]).order("id desc").paginate(params[:page], :limit => params[:limit])
@upload_reports = Reports::UploadTags.includes(versions: [:post]).for_user(params[:user_id]).order("id desc").paginate(params[:page], :limit => params[:limit])
end
end

View File

@@ -29,9 +29,9 @@ module Reports
def uploader_tags_array
@uploader_tags ||= begin
added_tags = []
PostArchive.where(post_id: id, updater_id: uploader_id).each do |version|
added_tags += version.changes[:added_tags]
uploader_versions = versions.select { |p| p.updater_id == uploader_id }
added_tags = uploader_versions.flat_map do |version|
version.changes[:added_tags]
end
added_tags.uniq.sort
end

View File

@@ -48,6 +48,11 @@ class Post < ActiveRecord::Base
has_many :children, lambda {order("posts.id")}, :class_name => "Post", :foreign_key => "parent_id"
has_many :disapprovals, :class_name => "PostDisapproval", :dependent => :destroy
has_many :favorites, :dependent => :destroy
if PostArchive.enabled?
has_many :versions, lambda {order("post_versions.updated_at ASC, id ASC")}, :class_name => "PostArchive", :dependent => :destroy
end
attr_accessible :source, :rating, :tag_string, :old_tag_string, :old_parent_id, :old_source, :old_rating, :parent_id, :has_embedded_notes, :as => [:member, :builder, :gold, :platinum, :janitor, :moderator, :admin, :default]
attr_accessible :is_rating_locked, :is_note_locked, :as => [:builder, :janitor, :moderator, :admin]
attr_accessible :is_status_locked, :as => [:admin]
@@ -1408,14 +1413,6 @@ class Post < ActiveRecord::Base
end
module VersionMethods
def versions
if PostArchive.enabled?
PostArchive.where(post_id: id).order("updated_at ASC, id asc")
else
raise "Archive service not configured"
end
end
def create_version(force = false)
if new_record? || rating_changed? || source_changed? || parent_id_changed? || tag_string_changed? || force
create_new_version