diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 8750e226b9..f8ae855e28 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -750,6 +750,12 @@ module ActiveRecord #:nodoc: @arel_engine = @relation = nil end + def clear_cache! # :nodoc: + @@columns.clear + @@columns_hash.clear + @@arel_tables.clear + end + def reset_column_cache # :nodoc: @@columns.delete table_name @@columns_hash.delete table_name diff --git a/activerecord/lib/active_record/railtie.rb b/activerecord/lib/active_record/railtie.rb index 2accf0a48f..72687c9ca3 100644 --- a/activerecord/lib/active_record/railtie.rb +++ b/activerecord/lib/active_record/railtie.rb @@ -72,6 +72,7 @@ module ActiveRecord ActiveSupport.on_load(:active_record) do ActionDispatch::Reloader.to_cleanup do ActiveRecord::Base.clear_reloadable_connections! + ActiveRecord::Base.clear_cache! end end end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index a255c07957..68adeff882 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -1553,6 +1553,14 @@ class BasicsTest < ActiveRecord::TestCase end end + def test_clear_cache! + # preheat cache + c1 = Post.columns + ActiveRecord::Base.clear_cache! + c2 = Post.columns + assert_not_equal c1, c2 + end + def test_default_scope_is_reset Object.const_set :UnloadablePost, Class.new(ActiveRecord::Base) UnloadablePost.table_name = 'posts'