From 4cc3f304cc0bc4a7dbaf41a6e4e12ecbdbba6e22 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Shibuya Date: Sun, 14 Aug 2022 13:55:28 +0900 Subject: [PATCH] Fix export action didn't use export section for eager loading Fixes #1954 --- .../rails_admin/main_controller.rb | 3 ++- .../rails_admin/main_controller_spec.rb | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/controllers/rails_admin/main_controller.rb b/app/controllers/rails_admin/main_controller.rb index 460c099ece..5968bb7bec 100644 --- a/app/controllers/rails_admin/main_controller.rb +++ b/app/controllers/rails_admin/main_controller.rb @@ -123,7 +123,8 @@ def check_for_cancel end def get_collection(model_config, scope, pagination) - eager_loads = model_config.list.fields.flat_map(&:eager_load_values) + section = @action.key == :export ? model_config.export : model_config.list + eager_loads = section.fields.flat_map(&:eager_load_values) options = {} options = options.merge(page: (params[Kaminari.config.param_name] || 1).to_i, per: (params[:per] || model_config.list.items_per_page)) if pagination options = options.merge(include: eager_loads) unless eager_loads.blank? diff --git a/spec/controllers/rails_admin/main_controller_spec.rb b/spec/controllers/rails_admin/main_controller_spec.rb index e68317396a..b1b52bb85e 100644 --- a/spec/controllers/rails_admin/main_controller_spec.rb +++ b/spec/controllers/rails_admin/main_controller_spec.rb @@ -10,6 +10,10 @@ def get(action, params) super action, params: params end + before do + controller.instance_variable_set :@action, RailsAdmin::Config::Actions.find(:index) + end + describe '#check_for_cancel' do before do allow(controller).to receive(:back_or_index) { raise StandardError.new('redirected back') } @@ -266,6 +270,24 @@ def get(action, params) expect(abstract_model).to receive(:all).with(hash_including(include: [{players: :draft}]), nil).once.and_call_original controller.send(:get_collection, model_config, nil, false).to_a end + + context 'on export' do + before do + controller.instance_variable_set :@action, RailsAdmin::Config::Actions.find(:export) + end + + it 'uses the export section' do + RailsAdmin.config Team do + export do + field :players do + eager_load true + end + end + end + expect(abstract_model).to receive(:all).with(hash_including(include: [:players]), nil).once.and_call_original + controller.send(:get_collection, model_config, nil, false).to_a + end + end end describe 'index' do