Browse files

Return nil from read_attribute(:foo) if 'foo' is not present in the @…

…attributes hash, but the _foo method has been defined. This brings the behaviour into line with the 3-0-stable branch and the master branch before 93641ed (there were previously no assertions about this which is why the change slipped through). Note that actually calling the 'foo' method will still raise an error if the attribute is not present.
  • Loading branch information...
1 parent e01dfb2 commit 65469a6e5e8cd2418c99c3862dd33feed69536bd @jonleighton jonleighton committed Apr 15, 2011
View
2 activerecord/lib/active_record/attribute_methods/read.rb
@@ -100,7 +100,7 @@ def _#{method_name}
# "2004-12-12" in a data column is cast to a date object, like Date.new(2004, 12, 12)).
def read_attribute(attr_name)
if respond_to? "_#{attr_name}"
- send "_#{attr_name}"
+ send "_#{attr_name}" if @attributes.has_key?(attr_name.to_s)
else
_read_attribute attr_name
end
View
3 activerecord/test/cases/finder_test.rb
@@ -247,9 +247,10 @@ def test_unexisting_record_exception_handling
def test_find_only_some_columns
topic = Topic.find(1, :select => "author_name")
assert_raise(ActiveModel::MissingAttributeError) {topic.title}
+ assert_nil topic.read_attribute("title")
assert_equal "David", topic.author_name
assert !topic.attribute_present?("title")
- #assert !topic.respond_to?("title")
+ assert !topic.attribute_present?(:title)
assert topic.attribute_present?("author_name")
assert_respond_to topic, "author_name"
end

0 comments on commit 65469a6

Please sign in to comment.