aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/column.rb
diff options
context:
space:
mode:
authorRyan Warnick <warnickr@gmail.com>2013-02-11 17:31:25 -0700
committerRyan Warnick <warnickr@gmail.com>2013-02-13 18:41:15 -0700
commit0c0ee13a1cb6a8156c7a3bf7334efc6ff8c04c5d (patch)
treed84d4b3a6c2d6b7aaf6653d038bd8ff67f205924 /activerecord/lib/active_record/connection_adapters/column.rb
parentf8c8ad56c8a1cb48c6535fd8e248dcb9049e0aa3 (diff)
downloadrails-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/active_record/connection_adapters/column.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/column.rb9
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