diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-03-07 13:26:03 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-03-07 13:26:03 -0300 |
commit | d3adfd6d3b6bb07f4e4d56b017eff1ff740523ff (patch) | |
tree | 03a5a3e4db0a4d51188a5114b1223179eb56c5ed | |
parent | cf09ac380e7d786d0d688983fb2080dc693f65a1 (diff) | |
parent | 53f18f2c5475809f7f6c5576aba89d6340a57c06 (diff) | |
download | rails-d3adfd6d3b6bb07f4e4d56b017eff1ff740523ff.tar.gz rails-d3adfd6d3b6bb07f4e4d56b017eff1ff740523ff.tar.bz2 rails-d3adfd6d3b6bb07f4e4d56b017eff1ff740523ff.zip |
Merge pull request #9474 from HonoreDB/master
More helpful error message when instantiating an abstract class
Conflicts:
activerecord/CHANGELOG.md
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/inheritance.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/base_test.rb | 14 |
3 files changed, 21 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index a7b5ba9f3e..4c594cc19b 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,9 @@ ## Rails 4.0.0 (unreleased) ## +* Throw `NotImplementedError` when trying to instantiate `ActiveRecord::Base` or an abstract class. + + *Aaron Weiner* + * Warn when `rake db:structure:dump` with a mysl database and `mysqldump` is not in the PATH or fails. Fixes #9518. diff --git a/activerecord/lib/active_record/inheritance.rb b/activerecord/lib/active_record/inheritance.rb index e630897a4b..13a8352f13 100644 --- a/activerecord/lib/active_record/inheritance.rb +++ b/activerecord/lib/active_record/inheritance.rb @@ -15,6 +15,9 @@ module ActiveRecord # and if the inheritance column is attr accessible, it initializes an # instance of the given subclass instead of the base class def new(*args, &block) + if abstract_class? || self == Base + raise NotImplementedError, "#{self} is an abstract class and can not be instantiated." + end if (attrs = args.first).is_a?(Hash) if subclass = subclass_from_attrs(attrs) return subclass.new(*args, &block) diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index af1845c937..8e6e462404 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -307,6 +307,20 @@ class BasicsTest < ActiveRecord::TestCase assert_equal("last_read", ex.errors[0].attribute) end + def test_initialize_abstract_class + e = assert_raises(NotImplementedError) do + FirstAbstractClass.new + end + assert_equal("FirstAbstractClass is an abstract class and can not be instantiated.", e.message) + end + + def test_initialize_base + e = assert_raises(NotImplementedError) do + ActiveRecord::Base.new + end + assert_equal("ActiveRecord::Base is an abstract class and can not be instantiated.", e.message) + end + def test_create_after_initialize_without_block cb = CustomBulb.create(:name => 'Dude') assert_equal('Dude', cb.name) |