From f1030fd897640f2d051ee29143544fad5b64d6d3 Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Wed, 11 May 2016 08:04:26 -0400 Subject: Dont cache the conn_spec_name when empty We cannot cache the connection_specification_name when it doesnt exist. Thats because the parent value could change, and we should keep failling back to the parent. If we cache that in a children as an ivar, we would not fallback anymore in the next call, so the children would not get the new parent spec_name. --- activerecord/lib/active_record/connection_handling.rb | 2 +- .../test/cases/connection_adapters/connection_handler_test.rb | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/connection_handling.rb b/activerecord/lib/active_record/connection_handling.rb index 0a69ad2c0e..bf9fad371d 100644 --- a/activerecord/lib/active_record/connection_handling.rb +++ b/activerecord/lib/active_record/connection_handling.rb @@ -96,7 +96,7 @@ module ActiveRecord # Return the specification name from the current class or its parent. def connection_specification_name if !defined?(@connection_specification_name) || @connection_specification_name.nil? - @connection_specification_name = self == Base ? "primary" : superclass.connection_specification_name + return self == Base ? "primary" : superclass.connection_specification_name end @connection_specification_name end diff --git a/activerecord/test/cases/connection_adapters/connection_handler_test.rb b/activerecord/test/cases/connection_adapters/connection_handler_test.rb index 62beb8bea4..2d3c411479 100644 --- a/activerecord/test/cases/connection_adapters/connection_handler_test.rb +++ b/activerecord/test/cases/connection_adapters/connection_handler_test.rb @@ -91,7 +91,7 @@ module ActiveRecord end def test_a_class_using_custom_pool_and_switching_back_to_primary - klass2 = Class.new(Base) { def self.name; 'klass2'; end } + klass2 = Class.new(Base) { def self.name; 'klass2'; end } assert_equal klass2.connection.object_id, ActiveRecord::Base.connection.object_id @@ -103,6 +103,15 @@ module ActiveRecord assert_equal klass2.connection.object_id, ActiveRecord::Base.connection.object_id end + + def test_connection_specification_name_should_fallback_to_parent + klassA = Class.new(Base) + klassB = Class.new(klassA) + + assert_equal klassB.connection_specification_name, klassA.connection_specification_name + klassA.connection_specification_name = "readonly" + assert_equal "readonly", klassB.connection_specification_name + end end end end -- cgit v1.2.3