diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-01 10:41:45 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-01 10:41:45 -0700 |
commit | b2a24a15785e94078bae87946ffa43bc59bccfec (patch) | |
tree | dc0ba06f14226a8611164697705218dfeb9757b0 /activerecord | |
parent | 5722915fa7e172a5632b76023539f024e5711049 (diff) | |
parent | 13823a4cf35e99582c9b634a94c362d565b7841c (diff) | |
download | rails-b2a24a15785e94078bae87946ffa43bc59bccfec.tar.gz rails-b2a24a15785e94078bae87946ffa43bc59bccfec.tar.bz2 rails-b2a24a15785e94078bae87946ffa43bc59bccfec.zip |
Merge pull request #6092 from jsanders/issue_4001_error_typecasting_non_integer_castable
Don't type cast values that don't respond to to_i to 1
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/column.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/column_test.rb | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/column.rb b/activerecord/lib/active_record/connection_adapters/column.rb index b7e1513422..9af8e46120 100644 --- a/activerecord/lib/active_record/connection_adapters/column.rb +++ b/activerecord/lib/active_record/connection_adapters/column.rb @@ -95,7 +95,7 @@ module ActiveRecord case type when :string, :text then value - when :integer then value.to_i rescue value ? 1 : 0 + when :integer then value.to_i when :float then value.to_f when :decimal then klass.value_to_decimal(value) when :datetime, :timestamp then klass.string_to_time(value) diff --git a/activerecord/test/cases/column_test.rb b/activerecord/test/cases/column_test.rb index ccc57cb876..4fcf8a33a4 100644 --- a/activerecord/test/cases/column_test.rb +++ b/activerecord/test/cases/column_test.rb @@ -24,6 +24,30 @@ module ActiveRecord assert !column.type_cast('off') assert !column.type_cast('OFF') end + + def test_type_cast_integer + column = Column.new("field", nil, "integer") + assert_equal 1, column.type_cast(1) + assert_equal 1, column.type_cast('1') + assert_equal 1, column.type_cast('1ignore') + assert_equal 0, column.type_cast('bad1') + assert_equal 0, column.type_cast('bad') + assert_equal 1, column.type_cast(1.7) + assert_nil column.type_cast(nil) + end + + def test_type_cast_non_integer_to_integer + column = Column.new("field", nil, "integer") + assert_raises(NoMethodError) do + column.type_cast([]) + end + assert_raises(NoMethodError) do + column.type_cast(true) + end + assert_raises(NoMethodError) do + column.type_cast(false) + end + end end end end |