From fb86c6718ab155013754116e145741ab27116ef9 Mon Sep 17 00:00:00 2001 From: Richard Lee <14349+dlackty@users.noreply.github.com> Date: Mon, 17 Aug 2020 02:39:06 +0800 Subject: [PATCH] Rewrite N+1 query --- lib/active_admin/sortable_tree/controller_actions.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/active_admin/sortable_tree/controller_actions.rb b/lib/active_admin/sortable_tree/controller_actions.rb index e08df36..6373e76 100644 --- a/lib/active_admin/sortable_tree/controller_actions.rb +++ b/lib/active_admin/sortable_tree/controller_actions.rb @@ -24,10 +24,13 @@ def sortable(options = {}) collection_action :sort, :method => :post do resource_name = ActiveAdmin::SortableTree::Compatibility.normalized_resource_name(active_admin_config.resource_name) + # Query all resources at once to avoid N+1 + ids = (params[resource_name].keys + params[resource_name].values).compact.uniq + resources = Hash[resource_class.where(id: ids).map { |r| [r.id.to_i, r] }] + records = [] params[resource_name].each_pair do |resource, parent_resource| - parent_resource = resource_class.find(parent_resource) rescue nil - records << [resource_class.find(resource), parent_resource] + records << [resources[resource.to_i], resources[parent_resource.to_i]] end errors = []