diff options
author | Ryan Warnick <warnickr@gmail.com> | 2013-02-11 17:31:25 -0700 |
---|---|---|
committer | Ryan Warnick <warnickr@gmail.com> | 2013-02-13 18:41:15 -0700 |
commit | 0c0ee13a1cb6a8156c7a3bf7334efc6ff8c04c5d (patch) | |
tree | d84d4b3a6c2d6b7aaf6653d038bd8ff67f205924 /activerecord/lib | |
parent | f8c8ad56c8a1cb48c6535fd8e248dcb9049e0aa3 (diff) | |
download | rails-0c0ee13a1cb6a8156c7a3bf7334efc6ff8c04c5d.tar.gz rails-0c0ee13a1cb6a8156c7a3bf7334efc6ff8c04c5d.tar.bz2 rails-0c0ee13a1cb6a8156c7a3bf7334efc6ff8c04c5d.zip |
9253: Before writing a numeric attribute value, ActiveRecord does an implicit
conversion of boolean types (true => 1 and false => 0). If the numeric value
being assigned is a BigDecimal, then ActiveRecord compares a BigDecimal to
true and false. This is known to be very slow in Ruby 1.9.3.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/column.rb | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/column.rb b/activerecord/lib/active_record/connection_adapters/column.rb index 747331f3a1..a4b3a0c584 100644 --- a/activerecord/lib/active_record/connection_adapters/column.rb +++ b/activerecord/lib/active_record/connection_adapters/column.rb @@ -74,12 +74,13 @@ module ActiveRecord def type_cast_for_write(value) return value unless number? - if value == false + case value + when FalseClass 0 - elsif value == true + when TrueClass 1 - elsif value.is_a?(String) && value.blank? - nil + when String + value.presence else value end |