提交 7f7b4800 编写于 作者: J Jon Leighton 提交者: Aaron Patterson

When assigning a has_one, if the new record fails to save, raise an error

上级 1bc71ed9
...@@ -32,9 +32,9 @@ def replace(record, save = true) ...@@ -32,9 +32,9 @@ def replace(record, save = true)
loaded loaded
if @owner.persisted? && record && save if @owner.persisted? && record && save
record.save && self unless record.save
else raise RecordNotSaved, "Failed to save the new associated #{@reflection.name}."
record && self end
end end
end end
......
...@@ -93,18 +93,18 @@ def test_natural_assignment_to_nil ...@@ -93,18 +93,18 @@ def test_natural_assignment_to_nil
def test_nullification_on_association_change def test_nullification_on_association_change
firm = companies(:rails_core) firm = companies(:rails_core)
old_account_id = firm.account.id old_account_id = firm.account.id
firm.account = Account.new firm.account = Account.new(:credit_limit => 5)
# account is dependent with nullify, therefore its firm_id should be nil # account is dependent with nullify, therefore its firm_id should be nil
assert_nil Account.find(old_account_id).firm_id assert_nil Account.find(old_account_id).firm_id
end end
def test_association_change_calls_delete def test_association_change_calls_delete
companies(:first_firm).deletable_account = Account.new companies(:first_firm).deletable_account = Account.new(:credit_limit => 5)
assert_equal [], Account.destroyed_account_ids[companies(:first_firm).id] assert_equal [], Account.destroyed_account_ids[companies(:first_firm).id]
end end
def test_association_change_calls_destroy def test_association_change_calls_destroy
companies(:first_firm).account = Account.new companies(:first_firm).account = Account.new(:credit_limit => 5)
assert_equal [companies(:first_firm).id], Account.destroyed_account_ids[companies(:first_firm).id] assert_equal [companies(:first_firm).id], Account.destroyed_account_ids[companies(:first_firm).id]
end end
...@@ -182,17 +182,6 @@ def test_build ...@@ -182,17 +182,6 @@ def test_build
assert_equal account, firm.account assert_equal account, firm.account
end end
def test_failing_build_association
firm = Firm.new("name" => "GlobalMegaCorp")
firm.save
firm.account = account = Account.new
assert_equal account, firm.account
assert !account.save
assert_equal account, firm.account
assert_equal ["can't be empty"], account.errors["credit_limit"]
end
def test_create def test_create
firm = Firm.new("name" => "GlobalMegaCorp") firm = Firm.new("name" => "GlobalMegaCorp")
firm.save firm.save
...@@ -320,4 +309,15 @@ def test_replacement_failure_due_to_existing_record_should_raise_error ...@@ -320,4 +309,15 @@ def test_replacement_failure_due_to_existing_record_should_raise_error
assert_equal ships(:black_pearl), pirate.ship assert_equal ships(:black_pearl), pirate.ship
assert_equal pirate.id, pirate.ship.pirate_id assert_equal pirate.id, pirate.ship.pirate_id
end end
def test_replacement_failure_due_to_new_record_should_raise_error
pirate = pirates(:blackbeard)
new_ship = Ship.new
assert_raise(ActiveRecord::RecordNotSaved) do
pirate.ship = new_ship
end
assert_equal new_ship, pirate.ship
assert_equal pirate.id, new_ship.pirate_id
end
end end
...@@ -90,7 +90,7 @@ def test_save_fails_for_invalid_has_one ...@@ -90,7 +90,7 @@ def test_save_fails_for_invalid_has_one
firm = Firm.find(:first) firm = Firm.find(:first)
assert firm.valid? assert firm.valid?
firm.account = Account.new firm.build_account
assert !firm.account.valid? assert !firm.account.valid?
assert !firm.valid? assert !firm.valid?
...@@ -102,7 +102,7 @@ def test_save_succeeds_for_invalid_has_one_with_validate_false ...@@ -102,7 +102,7 @@ def test_save_succeeds_for_invalid_has_one_with_validate_false
firm = Firm.find(:first) firm = Firm.find(:first)
assert firm.valid? assert firm.valid?
firm.unvalidated_account = Account.new firm.build_unvalidated_account
assert !firm.unvalidated_account.valid? assert !firm.unvalidated_account.valid?
assert firm.valid? assert firm.valid?
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册