diff options
-rw-r--r-- | activerecord/lib/active_record/model_schema.rb | 10 | ||||
-rw-r--r-- | activerecord/test/cases/base_test.rb | 11 |
2 files changed, 18 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/model_schema.rb b/activerecord/lib/active_record/model_schema.rb index c1a8583119..261f6fa974 100644 --- a/activerecord/lib/active_record/model_schema.rb +++ b/activerecord/lib/active_record/model_schema.rb @@ -128,10 +128,14 @@ module ActiveRecord # Computes the table name, (re)sets it internally, and returns it. def reset_table_name #:nodoc: - if active_record_super.abstract_class? + if abstract_class? + self.table_name = if active_record_super == Base || active_record_super.abstract_class? + nil + else + active_record_super.table_name + end + elsif active_record_super.abstract_class? self.table_name = active_record_super.table_name || compute_table_name - elsif abstract_class? - self.table_name = active_record_super == Base ? nil : active_record_super.table_name else self.table_name = compute_table_name end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 80a660717e..f5c139e85f 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -28,6 +28,13 @@ require 'rexml/document' require 'active_support/core_ext/exception' require 'bcrypt' +class FirstAbstractClass < ActiveRecord::Base + self.abstract_class = true +end +class SecondAbstractClass < FirstAbstractClass + self.abstract_class = true +end +class Photo < SecondAbstractClass; end class Category < ActiveRecord::Base; end class Categorization < ActiveRecord::Base; end class Smarts < ActiveRecord::Base; end @@ -1904,4 +1911,8 @@ class BasicsTest < ActiveRecord::TestCase assert_equal Teapot, OtherTeapot.active_record_super assert_equal ActiveRecord::Model, CoolTeapot.active_record_super end + + def test_table_name_with_2_abstract_subclasses + assert_equal "photos", Photo.table_name + end end |