From c0ef95a1c6db3095c4b5f80f8044fbbbdfebeff1 Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Mon, 20 Jul 2015 09:00:00 -0600 Subject: Correctly ignore `mark_for_destruction` without `autosave` As per the docs, `mark_for_destruction` should do nothing if `autosave` is not set to true. We normally persist associations on a record no matter what if the record is a new record, but we were always skipping records which were `marked_for_destruction?`. Fixes #20882 --- activerecord/test/cases/autosave_association_test.rb | 7 +++++++ activerecord/test/models/ship.rb | 1 + 2 files changed, 8 insertions(+) (limited to 'activerecord/test') diff --git a/activerecord/test/cases/autosave_association_test.rb b/activerecord/test/cases/autosave_association_test.rb index 6b69b96e21..37ec3f1106 100644 --- a/activerecord/test/cases/autosave_association_test.rb +++ b/activerecord/test/cases/autosave_association_test.rb @@ -1154,6 +1154,13 @@ class TestAutosaveAssociationOnAHasOneAssociation < ActiveRecord::TestCase def test_should_not_load_the_associated_model assert_queries(1) { @pirate.catchphrase = 'Arr'; @pirate.save! } end + + def test_mark_for_destruction_is_ignored_without_autosave_true + ship = ShipWithoutNestedAttributes.new(name: "The Black Flag") + ship.parts.build.mark_for_destruction + + assert_not ship.valid? + end end class TestAutosaveAssociationOnAHasOneThroughAssociation < ActiveRecord::TestCase diff --git a/activerecord/test/models/ship.rb b/activerecord/test/models/ship.rb index fcc533380b..95172e4d3e 100644 --- a/activerecord/test/models/ship.rb +++ b/activerecord/test/models/ship.rb @@ -22,6 +22,7 @@ end class ShipWithoutNestedAttributes < ActiveRecord::Base self.table_name = "ships" has_many :prisoners, inverse_of: :ship, foreign_key: :ship_id + has_many :parts, class_name: "ShipPart", foreign_key: :ship_id validates :name, presence: true end -- cgit v1.2.3