From 5dec3dd59c9f4b5c881860b0f629c8d6b3706f90 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Mon, 6 Feb 2012 15:51:39 -0800 Subject: delegate attribute typecasting to the column --- .../lib/active_record/attribute_methods/write.rb | 18 ++---------------- .../lib/active_record/connection_adapters/column.rb | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) (limited to 'activerecord/lib') 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? -- cgit v1.2.3