diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb index 08cfa8dd6994cb71b70dfb680ab63d157e68a659..bb2a5c01222eb11e190ab72350fd62521e460fe1 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb @@ -25,6 +25,8 @@ def type_cast(value) class Money def type_cast(value) + return if value.nil? + # Because money output is formatted according to the locale, there are two # cases to consider (note the decimal separators): # (1) $12,345,678.12 @@ -62,18 +64,24 @@ def type_cast(value) class Integer def type_cast(value) - value.to_i + return if value.nil? + + value.to_i rescue value ? 1 : 0 end end class Boolean def type_cast(value) + return if value.nil? + ConnectionAdapters::Column.value_to_boolean value end end class Timestamp def type_cast(value) + return if value.nil? + # FIXME: probably we can improve this since we know it is PG # specific ConnectionAdapters::Column.string_to_time value @@ -82,6 +90,8 @@ def type_cast(value) class Date def type_cast(value) + return if value.nil? + # FIXME: probably we can improve this since we know it is PG # specific ConnectionAdapters::Column.value_to_date value @@ -90,6 +100,8 @@ def type_cast(value) class Time def type_cast(value) + return if value.nil? + # FIXME: probably we can improve this since we know it is PG # specific ConnectionAdapters::Column.string_to_dummy_time value @@ -98,6 +110,8 @@ def type_cast(value) class Float def type_cast(value) + return if value.nil? + value.to_f end end