aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorJames Coleman <jtc331@gmail.com>2012-03-02 15:37:48 -0500
committerJames Coleman <jtc331@gmail.com>2012-03-02 16:31:18 -0500
commit217a8b01b1349d50fc9c331e9411034289c640ab (patch)
treecfe228d5ee1970a31f47263b07a02a041a47cfdf /activerecord/test/cases
parent5497432d71b88ae4b99c6c59199eba95d81f28f6 (diff)
downloadrails-217a8b01b1349d50fc9c331e9411034289c640ab.tar.gz
rails-217a8b01b1349d50fc9c331e9411034289c640ab.tar.bz2
rails-217a8b01b1349d50fc9c331e9411034289c640ab.zip
Unset association when existing record is destroyed.
To avoid foreign key errors (and invalid data) in the database, when a belongs_to association is destroyed, it should also be nil'd out on the parent object.
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/nested_attributes_test.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/activerecord/test/cases/nested_attributes_test.rb b/activerecord/test/cases/nested_attributes_test.rb
index 2ae9cb4888..131f2de158 100644
--- a/activerecord/test/cases/nested_attributes_test.rb
+++ b/activerecord/test/cases/nested_attributes_test.rb
@@ -450,6 +450,22 @@ class TestNestedAttributesOnABelongsToAssociation < ActiveRecord::TestCase
end
end
+ def test_should_unset_association_when_an_existing_record_is_destroyed
+ @ship.reload
+ original_pirate_id = @ship.pirate.id
+ @ship.attributes = {:pirate_attributes => {:id => @ship.pirate.id, :_destroy => true}}
+ @ship.save!
+
+ assert_empty Pirate.where(["id = ?", original_pirate_id])
+ assert_nil @ship.pirate_id
+ assert_nil @ship.pirate
+
+ @ship.reload
+ assert_empty Pirate.where(["id = ?", original_pirate_id])
+ assert_nil @ship.pirate_id
+ assert_nil @ship.pirate
+ end
+
def test_should_not_destroy_an_existing_record_if_destroy_is_not_truthy
[nil, '0', 0, 'false', false].each do |not_truth|
@ship.update_attributes(:pirate_attributes => { :id => @ship.pirate.id, :_destroy => not_truth })