diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-01-03 15:36:34 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-01-03 15:36:34 -0800 |
commit | 3a39de677adaf7e3d4134bab530ba25d21a431d3 (patch) | |
tree | 6db9a93e3835f1fc2c82fb1cd29319108573f204 /activerecord | |
parent | a664686e47fb8fb2ffa3e512bdbd380face4e577 (diff) | |
parent | 8d98c83bbceb905cd65c487cfa714d2fca92501c (diff) | |
download | rails-3a39de677adaf7e3d4134bab530ba25d21a431d3.tar.gz rails-3a39de677adaf7e3d4134bab530ba25d21a431d3.tar.bz2 rails-3a39de677adaf7e3d4134bab530ba25d21a431d3.zip |
Merge pull request #8734 from jstirk/master-column_writer_to_i_errors
Fix undefined method `to_i' introduced in 3.2.9
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 7 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/column.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/associations/belongs_to_associations_test.rb | 12 | ||||
-rw-r--r-- | activerecord/test/cases/column_test.rb | 20 |
4 files changed, 37 insertions, 8 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index db8fa303be..49473dc92a 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,6 +1,11 @@ ## Rails 4.0.0 (unreleased) ## -* Rename `update_attributes` to `update`, keep `update_attributes` as an alias for `update` method. +* Fix undefined method `to_i` when calling `new` on a scope that uses an Array. + Fixes #8718, #8734. + + *Jason Stirk* + +* Rename `update_attributes` to `update`, keep `update_attributes` as an alias for `update` method. This is a soft-deprecation for `update_attributes`, although it will still work without any deprecation message in 4.0 is recommended to start using `update` since `update_attributes` will be deprecated and removed in future versions of Rails. diff --git a/activerecord/lib/active_record/connection_adapters/column.rb b/activerecord/lib/active_record/connection_adapters/column.rb index fd36a5b075..51d3acaff8 100644 --- a/activerecord/lib/active_record/connection_adapters/column.rb +++ b/activerecord/lib/active_record/connection_adapters/column.rb @@ -206,7 +206,11 @@ module ActiveRecord when TrueClass, FalseClass value ? 1 : 0 else - value.to_i + if value.respond_to?(:to_i) + value.to_i + else + nil + end end end diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb index 97a3d57fe0..3a6da0e59f 100644 --- a/activerecord/test/cases/associations/belongs_to_associations_test.rb +++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb @@ -63,6 +63,13 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase assert_equal apple.id, citibank.firm_id end + def test_id_assignment + apple = Firm.create("name" => "Apple") + citibank = Account.create("credit_limit" => 10) + citibank.firm_id = apple + assert_nil citibank.firm_id + end + def test_natural_assignment_with_primary_key apple = Firm.create("name" => "Apple") citibank = Client.create("name" => "Primary key client") @@ -567,6 +574,11 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase assert_equal new_firm.name, "Apple" end + def test_attributes_are_set_without_error_when_initialized_from_belongs_to_association_with_array_in_where_clause + new_account = Account.where(:credit_limit => [ 50, 60 ]).new + assert_nil new_account.credit_limit + end + def test_reassigning_the_parent_id_updates_the_object client = companies(:second_client) diff --git a/activerecord/test/cases/column_test.rb b/activerecord/test/cases/column_test.rb index 2124c256fa..dc1b30261c 100644 --- a/activerecord/test/cases/column_test.rb +++ b/activerecord/test/cases/column_test.rb @@ -1,4 +1,5 @@ require "cases/helper" +require 'models/company' module ActiveRecord module ConnectionAdapters @@ -40,13 +41,20 @@ module ActiveRecord def test_type_cast_non_integer_to_integer column = Column.new("field", nil, "integer") - assert_raises(NoMethodError) do - column.type_cast([]) - end + assert_nil column.type_cast([1,2]) + assert_nil column.type_cast({1 => 2}) + assert_nil column.type_cast((1..2)) + end - assert_raises(NoMethodError) do - column.type_cast(Object.new) - end + def test_type_cast_activerecord_to_integer + column = Column.new("field", nil, "integer") + firm = Firm.create(:name => 'Apple') + assert_nil column.type_cast(firm) + end + + def test_type_cast_object_without_to_i_to_integer + column = Column.new("field", nil, "integer") + assert_nil column.type_cast(Object.new) end def test_type_cast_time |