diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index b4a04e32d7..6f7b2cb108 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,11 @@ ## Rails 4.0.0 (unreleased) ## +* Attribute predicate methods, such as `article.title?`, will now raise + `ActiveModel::MissingAttributeError` if the attribute being queried for + truthiness was not read from the database, instead of just returning false. + + *Ernie Miller* + * `ActiveRecord::SchemaDumper` uses Ruby 1.9 style hash, which means that the schema.rb file will be generated using this new syntax from now on. diff --git a/activerecord/lib/active_record/attribute_methods/query.rb b/activerecord/lib/active_record/attribute_methods/query.rb index 483fd8f4f8..0f9723febb 100644 --- a/activerecord/lib/active_record/attribute_methods/query.rb +++ b/activerecord/lib/active_record/attribute_methods/query.rb @@ -8,7 +8,7 @@ module ActiveRecord end def query_attribute(attr_name) - value = read_attribute(attr_name) + value = read_attribute(attr_name) { |n| missing_attribute(n, caller) } case value when true then true diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 20c8e8894d..d44ac21b05 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -276,6 +276,7 @@ class FinderTest < ActiveRecord::TestCase def test_find_only_some_columns topic = Topic.all.merge!(:select => "author_name").find(1) assert_raise(ActiveModel::MissingAttributeError) {topic.title} + assert_raise(ActiveModel::MissingAttributeError) {topic.title?} assert_nil topic.read_attribute("title") assert_equal "David", topic.author_name assert !topic.attribute_present?("title")