From 26ad0e3ea3f72ce0a66e36b13e09627e0d2ed99e Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Fri, 18 Jul 2025 16:40:18 +0000 Subject: [PATCH] allow reloading of models --- lib/has_aux_table.rb | 5 +++++ spec/active_record/has_aux_table_spec.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/has_aux_table.rb b/lib/has_aux_table.rb index 557981d..70e2058 100644 --- a/lib/has_aux_table.rb +++ b/lib/has_aux_table.rb @@ -83,6 +83,11 @@ module HasAuxTable aux_class_name = aux_table_name.to_s.camelize aux_association_name = aux_table_name.to_s.singularize.to_sym + # Ensure the class name doesn't conflict with existing constants + if Object.const_defined?(aux_class_name) + Object.send(:remove_const, aux_class_name) + end + # Get the current class for the association main_class = T.cast(self, T.class_of(ActiveRecord::Base)) main_association_name = foreign_key.to_s.delete_suffix("_id").to_sym diff --git a/spec/active_record/has_aux_table_spec.rb b/spec/active_record/has_aux_table_spec.rb index 48c7b86..969991b 100644 --- a/spec/active_record/has_aux_table_spec.rb +++ b/spec/active_record/has_aux_table_spec.rb @@ -722,4 +722,22 @@ RSpec.describe HasAuxTable do expect(fork1.num_tongs).to eq(3) end end + + it "can redefine constants" do + class TestModel < ActiveRecord::Base + include HasAuxTable + end + + class TestModelSpecific < TestModel + aux_table :specific + end + + Object.send(:remove_const, :TestModelSpecific) + + expect { + class TestModelSpecific < TestModel + aux_table :specific + end + }.not_to raise_error + end end