post archives: fix N+1 problem when fetching previous version.
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user