diff options
author | Nate Berkopec <nate.berkopec@gmail.com> | 2013-04-01 19:19:11 -0400 |
---|---|---|
committer | Nate Berkopec <nate.berkopec@gmail.com> | 2013-04-02 09:50:06 -0400 |
commit | ab157ac6bef3e1aa9c3a221011c5dd7024f14d7e (patch) | |
tree | 055c41aafa6c5c96c0ce283d11cead959560842c | |
parent | abad4f7049040f3b3f29b04f27f0a3fab3065060 (diff) | |
download | rails-ab157ac6bef3e1aa9c3a221011c5dd7024f14d7e.tar.gz rails-ab157ac6bef3e1aa9c3a221011c5dd7024f14d7e.tar.bz2 rails-ab157ac6bef3e1aa9c3a221011c5dd7024f14d7e.zip |
Fix #new with an STI object with complex inheritance
-rw-r--r-- | activerecord/lib/active_record/inheritance.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/inheritance_test.rb | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/inheritance.rb b/activerecord/lib/active_record/inheritance.rb index f54865c86e..8df76c7f5f 100644 --- a/activerecord/lib/active_record/inheritance.rb +++ b/activerecord/lib/active_record/inheritance.rb @@ -174,7 +174,7 @@ module ActiveRecord if subclass_name.present? && subclass_name != self.name subclass = subclass_name.safe_constantize - unless subclasses.include?(subclass) + unless descendants.include?(subclass) raise ActiveRecord::SubclassNotFound.new("Invalid single-table inheritance type: #{subclass_name} is not a subclass of #{name}") end diff --git a/activerecord/test/cases/inheritance_test.rb b/activerecord/test/cases/inheritance_test.rb index 99d54e7526..a9be132801 100644 --- a/activerecord/test/cases/inheritance_test.rb +++ b/activerecord/test/cases/inheritance_test.rb @@ -194,6 +194,10 @@ class InheritanceTest < ActiveRecord::TestCase assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'Account') } end + def test_new_with_complex_inheritance + assert_nothing_raised { Client.new(type: 'VerySpecialClient') } + end + def test_new_with_autoload_paths path = File.expand_path('../../models/autoloadable', __FILE__) ActiveSupport::Dependencies.autoload_paths << path |