From 3db72441096b681939b873524091fbccc5b93848 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 2 Mar 2017 16:47:40 -0600 Subject: [PATCH 1/4] post_archive.rb: readd associations. --- app/models/post_archive.rb | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/app/models/post_archive.rb b/app/models/post_archive.rb index 64b2d97e9..736fcc5dc 100644 --- a/app/models/post_archive.rb +++ b/app/models/post_archive.rb @@ -1,6 +1,9 @@ class PostArchive < ActiveRecord::Base extend Memoist + belongs_to :post + belongs_to :updater, class_name: "User" + def self.enabled? Danbooru.config.aws_sqs_archives_url.present? end @@ -92,18 +95,10 @@ class PostArchive < ActiveRecord::Base super end - def post - Post.where(id: post_id).first - end - def previous PostArchive.where("post_id = ? and version < ?", post_id, version).order("version desc").first end - def updater - User.find(updater_id) - end - def diff(version = nil) if post.nil? latest_tags = tag_array @@ -237,13 +232,9 @@ class PostArchive < ActiveRecord::Base post.save! end - def updater - User.find_by_id(updater_id) - end - def method_attributes super + [:obsolete_added_tags, :obsolete_removed_tags, :unchanged_tags, :updater_name] end - memoize :previous, :post, :tag_array, :changes, :added_tags_with_fields, :removed_tags_with_fields, :obsolete_removed_tags, :obsolete_added_tags, :unchanged_tags + memoize :previous, :tag_array, :changes, :added_tags_with_fields, :removed_tags_with_fields, :obsolete_removed_tags, :obsolete_added_tags, :unchanged_tags end From f13f9e7163cf32756c48e3681ad7647009af345e Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 2 Mar 2017 16:48:16 -0600 Subject: [PATCH 2/4] post_versions/index.html.erb:5: avoid extraneous COUNT. @post_versions.empty? caused this query: SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "post_versions" WHERE (true) LIMIT 20 OFFSET 0) subquery_for_count which is unnecessary since @post_versions can be counted directly. --- app/views/post_versions/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/post_versions/index.html.erb b/app/views/post_versions/index.html.erb index c249f7329..8303e0fe6 100644 --- a/app/views/post_versions/index.html.erb +++ b/app/views/post_versions/index.html.erb @@ -2,7 +2,7 @@

Changes

- <% if @post_versions.empty? %> + <% if @post_versions.length == 0 %> <%= render "post_sets/blank" %> <% else %> <%= render "listing", :post_versions => @post_versions %> From 3290f5550aa90d569d9a19547368fdc58a66a4fd Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 2 Mar 2017 16:56:09 -0600 Subject: [PATCH 3/4] post_versions/_listing.html.erb:40: fix N+1 queries in "Undo" link. post_version.post.versions.first.id caused an extra query for each post version: SELECT "post_versions".* FROM "post_versions" WHERE "post_versions"."post_id" = $1 ORDER BY updated_at ASC, id asc LIMIT 1 --- app/views/post_versions/_listing.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/post_versions/_listing.html.erb b/app/views/post_versions/_listing.html.erb index ed5ff4178..39ab5026b 100644 --- a/app/views/post_versions/_listing.html.erb +++ b/app/views/post_versions/_listing.html.erb @@ -37,7 +37,7 @@ <% if CurrentUser.is_member? %> <% if post_version.post.visible? %> - <% if post_version.id != post_version.post.versions.first.id %> + <% if post_version.version != 1 %> <%= link_to "Undo", undo_post_version_path(post_version), :method => :put, :remote => true %> | <% end %> <%= link_to "Revert to", revert_post_path(post_version.post_id, :version_id => post_version.id), :method => :put, :remote => true %> From d4b9b66c0e46a015278f4897aff6cc9f4e5c35d9 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 2 Mar 2017 16:59:25 -0600 Subject: [PATCH 4/4] post_versions_controller.rb: fix N+1 queries in post, updater. Rendering the updater name at post_versions/_listing.html:25 caused this for each post version: SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 PostArchive#diff caused this for each post version: SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT 1 --- app/controllers/post_versions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/post_versions_controller.rb b/app/controllers/post_versions_controller.rb index ade388b63..71943d97a 100644 --- a/app/controllers/post_versions_controller.rb +++ b/app/controllers/post_versions_controller.rb @@ -3,7 +3,7 @@ class PostVersionsController < ApplicationController respond_to :html, :xml, :json def index - @post_versions = PostArchive.search(params[:search]).order("updated_at desc, id desc").paginate(params[:page], :limit => params[:limit], :search_count => params[:search]) + @post_versions = PostArchive.includes(:post, :updater).search(params[:search]).order("updated_at desc, id desc").paginate(params[:page], :limit => params[:limit], :search_count => params[:search]) respond_with(@post_versions) do |format| format.xml do render :xml => @post_versions.to_xml(:root => "post-versions")