upload tags report: fix N+1 queries issues.
This commit is contained in:
@@ -21,6 +21,6 @@ class ReportsController < ApplicationController
|
|||||||
|
|
||||||
def upload_tags
|
def upload_tags
|
||||||
@user = User.find(params[:user_id])
|
@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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ module Reports
|
|||||||
|
|
||||||
def uploader_tags_array
|
def uploader_tags_array
|
||||||
@uploader_tags ||= begin
|
@uploader_tags ||= begin
|
||||||
added_tags = []
|
uploader_versions = versions.select { |p| p.updater_id == uploader_id }
|
||||||
PostArchive.where(post_id: id, updater_id: uploader_id).each do |version|
|
added_tags = uploader_versions.flat_map do |version|
|
||||||
added_tags += version.changes[:added_tags]
|
version.changes[:added_tags]
|
||||||
end
|
end
|
||||||
added_tags.uniq.sort
|
added_tags.uniq.sort
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ class Post < ActiveRecord::Base
|
|||||||
has_many :children, lambda {order("posts.id")}, :class_name => "Post", :foreign_key => "parent_id"
|
has_many :children, lambda {order("posts.id")}, :class_name => "Post", :foreign_key => "parent_id"
|
||||||
has_many :disapprovals, :class_name => "PostDisapproval", :dependent => :destroy
|
has_many :disapprovals, :class_name => "PostDisapproval", :dependent => :destroy
|
||||||
has_many :favorites, :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 :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_rating_locked, :is_note_locked, :as => [:builder, :janitor, :moderator, :admin]
|
||||||
attr_accessible :is_status_locked, :as => [:admin]
|
attr_accessible :is_status_locked, :as => [:admin]
|
||||||
@@ -1408,14 +1413,6 @@ class Post < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
module VersionMethods
|
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)
|
def create_version(force = false)
|
||||||
if new_record? || rating_changed? || source_changed? || parent_id_changed? || tag_string_changed? || force
|
if new_record? || rating_changed? || source_changed? || parent_id_changed? || tag_string_changed? || force
|
||||||
create_new_version
|
create_new_version
|
||||||
|
|||||||
Reference in New Issue
Block a user