提交 3a39de67 编写于 作者: R Rafael Mendonça França

Merge pull request #8734 from jstirk/master-column_writer_to_i_errors

Fix undefined method `to_i' introduced in 3.2.9
## 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.
......
......@@ -206,7 +206,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
......
......@@ -63,6 +63,13 @@ def test_natural_assignment
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 @@ 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)
......
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
def test_type_cast_time
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册