Skip to content

Commit 71bf02d

Browse files
authored
Merge pull request #6500 from ikraamg/perf/admin-order-show-eager-load
Eager load line item details on the admin order page to avoid N+1s
2 parents 70e7bd6 + cdff698 commit 71bf02d

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

admin/app/controllers/solidus_admin/orders_controller.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def new
3636
end
3737

3838
def show
39-
load_order
39+
load_order(Spree::Order.includes(line_items: {variant: [:images, {product: :variant_images, option_values: :option_type}]}))
4040

4141
respond_to do |format|
4242
format.html { render component("orders/show").new(order: @order) }
@@ -111,8 +111,8 @@ def customers_for
111111

112112
private
113113

114-
def load_order
115-
@order = Spree::Order.find_by!(number: params[:id])
114+
def load_order(scope = Spree::Order)
115+
@order = scope.find_by!(number: params[:id])
116116
authorize! action_name, @order
117117
end
118118

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
require "spec_helper"
4+
5+
RSpec.describe "SolidusAdmin::OrdersController", type: :request do
6+
let(:admin_user) { create(:admin_user) }
7+
8+
before do
9+
allow(SolidusAdmin::Config).to receive(:enable_alpha_features?).and_return(true)
10+
allow_any_instance_of(SolidusAdmin::BaseController).to receive(:spree_current_user).and_return(admin_user)
11+
end
12+
13+
describe "GET #show" do
14+
let(:order) { create(:completed_order_with_totals, line_items_count: 3) }
15+
16+
it "renders successfully" do
17+
get solidus_admin.order_path(order)
18+
expect(response).to have_http_status(:ok)
19+
end
20+
21+
it "loads line item variants in a single query" do
22+
expect { get solidus_admin.order_path(order) }
23+
.to make_database_queries(matching: /from .spree_variants..*\bid. IN \(/im, count: 1)
24+
end
25+
end
26+
end

0 commit comments

Comments
 (0)