aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/lib/active_record/attribute_methods/read.rb20
-rw-r--r--activerecord/lib/active_record/attribute_methods/serialization.rb8
-rw-r--r--activerecord/lib/active_record/attribute_methods/write.rb4
3 files changed, 16 insertions, 16 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/read.rb b/activerecord/lib/active_record/attribute_methods/read.rb
index 788d671ad1..4fdfe77bab 100644
--- a/activerecord/lib/active_record/attribute_methods/read.rb
+++ b/activerecord/lib/active_record/attribute_methods/read.rb
@@ -91,21 +91,21 @@ module ActiveRecord
def _read_attribute(attr_name)
attr_name = attr_name.to_s
attr_name = self.class.primary_key if attr_name == 'id'
- value = @attributes[attr_name]
- unless value.nil?
- if column = column_for_attribute(attr_name)
- type_cast_attribute(column)
+
+ unless @attributes[attr_name].nil?
+ type_cast_attribute(column_for_attribute(attr_name), @attributes[attr_name])
+ end
+ end
+
+ private
+ def type_cast_attribute(column, value)
+ if column
+ column.type_cast(value)
else
value
end
end
- end
-
- def type_cast_attribute(column) #:nodoc:
- column.type_cast(@attributes[column.name])
- end
- private
def attribute(attribute_name)
read_attribute(attribute_name)
end
diff --git a/activerecord/lib/active_record/attribute_methods/serialization.rb b/activerecord/lib/active_record/attribute_methods/serialization.rb
index b084fdc25b..d1eb3d5bfc 100644
--- a/activerecord/lib/active_record/attribute_methods/serialization.rb
+++ b/activerecord/lib/active_record/attribute_methods/serialization.rb
@@ -80,15 +80,15 @@ module ActiveRecord
end
end
- def type_cast_attribute(column)
- if self.class.serialized_attributes.include?(column.name)
- @attributes[column.name].unserialized_value
+ def type_cast_attribute(column, value)
+ if column && self.class.serialized_attributes[column.name]
+ value.unserialized_value
else
super
end
end
- def type_cast_attribute_for_write(column, attr_name, value)
+ def type_cast_attribute_for_write(column, value)
if column && coder = self.class.serialized_attributes[column.name]
Attribute.new(coder, value, :unserialized)
else
diff --git a/activerecord/lib/active_record/attribute_methods/write.rb b/activerecord/lib/active_record/attribute_methods/write.rb
index 650156f3cf..07499db9f0 100644
--- a/activerecord/lib/active_record/attribute_methods/write.rb
+++ b/activerecord/lib/active_record/attribute_methods/write.rb
@@ -29,7 +29,7 @@ module ActiveRecord
column = column_for_attribute(attr_name)
if column || @attributes.has_key?(attr_name)
- @attributes[attr_name] = type_cast_attribute_for_write(column, attr_name, value)
+ @attributes[attr_name] = type_cast_attribute_for_write(column, value)
else
raise ActiveModel::MissingAttributeError, "can't write unknown attribute `#{attr_name}'"
end
@@ -42,7 +42,7 @@ module ActiveRecord
write_attribute(attribute_name, value)
end
- def type_cast_attribute_for_write(column, attr_name, value)
+ def type_cast_attribute_for_write(column, value)
if column && column.number?
convert_number_column_value(value)
else