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
|
respond_to :html, :xml, :json
|
||||||
|
|
||||||
def index
|
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|
|
respond_with(@post_versions) do |format|
|
||||||
format.xml do
|
format.xml do
|
||||||
render :xml => @post_versions.to_xml(:root => "post-versions")
|
render :xml => @post_versions.to_xml(:root => "post-versions")
|
||||||
|
|||||||
@@ -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.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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -96,7 +96,13 @@ class PostArchive < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def previous
|
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
|
end
|
||||||
|
|
||||||
def diff(version = nil)
|
def diff(version = nil)
|
||||||
|
|||||||
Reference in New Issue
Block a user