aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-02-06 15:51:39 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2012-02-06 15:51:39 -0800
commit5dec3dd59c9f4b5c881860b0f629c8d6b3706f90 (patch)
tree6544e05a7d08f3597f5cb0aad56eab532768295b /activerecord/lib
parent321b4c8527505f84a59412d078cef2b145782345 (diff)
downloadrails-5dec3dd59c9f4b5c881860b0f629c8d6b3706f90.tar.gz
rails-5dec3dd59c9f4b5c881860b0f629c8d6b3706f90.tar.bz2
rails-5dec3dd59c9f4b5c881860b0f629c8d6b3706f90.zip
delegate attribute typecasting to the column
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/attribute_methods/write.rb18
-rw-r--r--activerecord/lib/active_record/connection_adapters/column.rb15
2 files changed, 17 insertions, 16 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/write.rb b/activerecord/lib/active_record/attribute_methods/write.rb
index fde55b95da..310cd90433 100644
--- a/activerecord/lib/active_record/attribute_methods/write.rb
+++ b/activerecord/lib/active_record/attribute_methods/write.rb
@@ -43,23 +43,9 @@ module ActiveRecord
end
def type_cast_attribute_for_write(column, value)
- if column && column.number?
- convert_number_column_value(value)
- else
- value
- end
- end
+ return value unless column
- def convert_number_column_value(value)
- if value == false
- 0
- elsif value == true
- 1
- elsif value.is_a?(String) && value.blank?
- nil
- else
- value
- end
+ column.type_cast_for_write value
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/column.rb b/activerecord/lib/active_record/connection_adapters/column.rb
index 2ecb198edb..34d88edff3 100644
--- a/activerecord/lib/active_record/connection_adapters/column.rb
+++ b/activerecord/lib/active_record/connection_adapters/column.rb
@@ -66,6 +66,21 @@ module ActiveRecord
end
end
+ # Casts a Ruby value to something appropriate for writing to the database.
+ def type_cast_for_write(value)
+ return value unless number?
+
+ if value == false
+ 0
+ elsif value == true
+ 1
+ elsif value.is_a?(String) && value.blank?
+ nil
+ else
+ value
+ end
+ end
+
# Casts value (which is a String) to an appropriate instance.
def type_cast(value)
return nil if value.nil?