diff --git a/app/controllers/post_versions_controller.rb b/app/controllers/post_versions_controller.rb index 71943d97a..9bcbb2be7 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.includes(:post, :updater).search(params[:search]).order("updated_at desc, id desc").paginate(params[:page], :limit => params[:limit], :search_count => params[:search]) + @post_versions = PostArchive.includes(:updater, post: [:versions]).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") diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 30c56defc..afd255094 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -21,6 +21,6 @@ class ReportsController < ApplicationController def upload_tags @user = User.find(params[:user_id]) - @upload_reports = Reports::UploadTags.includes(versions: [:post]).for_user(params[:user_id]).order("id desc").paginate(params[:page], :limit => params[:limit]) + @upload_reports = Reports::UploadTags.includes(versions: { post: :versions }).for_user(params[:user_id]).order("id desc").paginate(params[:page], :limit => params[:limit]) end end diff --git a/app/models/post_archive.rb b/app/models/post_archive.rb index 311b51bf2..8b2d3ccb3 100644 --- a/app/models/post_archive.rb +++ b/app/models/post_archive.rb @@ -96,7 +96,13 @@ class PostArchive < ActiveRecord::Base end def previous - PostArchive.where("post_id = ? and version < ?", post_id, version).order("version desc").first + # HACK: if all the post versions for this post have already been preloaded, + # we can use that to avoid a SQL query. + if association(:post).loaded? && post.association(:versions).loaded? + post.versions.sort_by(&:version).reverse.find { |v| v.version < version } + else + PostArchive.where("post_id = ? and version < ?", post_id, version).order("version desc").first + end end def diff(version = nil)