diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index a25d9789d7..4f33b96034 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -2223,7 +2223,7 @@ def attributes(options = nil) # Returns a hash of attributes before typecasting and deserialization. def attributes_before_type_cast self.attribute_names.inject({}) do |attrs, name| - attrs[name] = read_attribute_before_typecast(name) + attrs[name] = read_attribute_before_type_cast(name) attrs end end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 4cba4a3ec6..46982712ca 100755 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -125,6 +125,22 @@ def test_array_content assert_equal(%w( one two three ), Topic.find(topic.id).content) end + def test_read_attributes_before_type_cast + category = Category.new({:name=>"Test categoty", :type => nil}) + category_attrs = {"name"=>"Test categoty", "type" => nil} + assert_equal category_attrs , category.attributes_before_type_cast + end + + def test_read_attributes_before_type_cast_on_boolean + bool = Booleantest.create({ "value" => false }) + assert_equal 0 , bool.attributes_before_type_cast["value"] + end + + def test_read_attributes_before_type_cast_on_datetime + developer = Developer.find(:first) + assert_equal developer.created_at.to_s(:db) , developer.attributes_before_type_cast["created_at"] + end + def test_hash_content topic = Topic.new topic.content = { "one" => 1, "two" => 2 } @@ -877,7 +893,7 @@ def test_mass_assignment_protection_inheritance end def test_readonly_attributes - assert_equal Set.new([ 'title', 'comments_count' ]), ReadonlyTitlePost.readonly_attributes + assert_equal Set.new([ 'title' , 'comments_count' ]), ReadonlyTitlePost.readonly_attributes post = ReadonlyTitlePost.create(:title => "cannot change this", :body => "changeable") post.reload