Permalink
Browse files

Merge pull request #8718 from jstirk/column_writer_to_i_errors

Fix undefined method `to_i' introduced since 3.2.8
  • Loading branch information...
2 parents 229042f + e842dbb commit 9a44cd1f44197d1c04c4543dd285d9146ddb44d0 @rafaelfranca rafaelfranca committed Jan 3, 2013
@@ -1,5 +1,10 @@
## Rails 3.2.11 (unreleased)
+* Fix undefined method `to_i` when calling `new` on a scope that uses an Array.
+ Fixes #8718.
+
+ *Jason Stirk*
+
* Serialized attributes can be serialized in integer columns.
Fix #8575.
@@ -175,7 +175,11 @@ def value_to_integer(value)
when TrueClass, FalseClass
value ? 1 : 0
else
- value.to_i
+ if value.respond_to?(:to_i)
+ value.to_i
+ else
+ nil
+ end
end
end
@@ -66,7 +66,8 @@ def test_natural_assignment
def test_id_assignment
apple = Firm.create("name" => "Apple")
citibank = Account.create("credit_limit" => 10)
- assert_raise(NoMethodError) { citibank.firm_id = apple }
+ citibank.firm_id = apple
+ assert_nil citibank.firm_id
end
def test_natural_assignment_with_primary_key
@@ -544,6 +545,11 @@ def test_attributes_are_being_set_when_initialized_from_belongs_to_association_w
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)
@@ -1,4 +1,5 @@
require "cases/helper"
+require 'models/company'
module ActiveRecord
module ConnectionAdapters
@@ -40,13 +41,20 @@ def test_type_cast_integer
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
end
end

0 comments on commit 9a44cd1

Please sign in to comment.