Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Remove unnecessary db call when replacing.

When replacing a has_many association with the same one, there is no
need to do a round-trip to the db to create/and drop a new transaction.

[fixes #14220]
  • Loading branch information...
commit 774160b9ad6908435bf3485e7ac98633deff76c6 1 parent be6f51a
@arthurnn arthurnn authored
View
4 activerecord/lib/active_record/associations/collection_association.rb
@@ -359,7 +359,9 @@ def replace(other_array)
if owner.new_record?
replace_records(other_array, original_target)
else
- transaction { replace_records(other_array, original_target) }
+ if other_array != original_target
+ transaction { replace_records(other_array, original_target) }
+ end
end
end
View
10 activerecord/test/cases/associations/has_many_associations_test.rb
@@ -1242,6 +1242,16 @@ def test_replace_failure
assert_equal orig_accounts, firm.accounts
end
+ def test_replace_with_same_content
+ firm = Firm.first
+ firm.clients = []
+ firm.save
+
+ assert_queries(0, ignore_none: true) do
+ firm.clients = []
+ end
+ end
+
def test_transactions_when_replacing_on_persisted
good = Client.new(:name => "Good")
bad = Client.new(:name => "Bad", :raise_on_save => true)
Please sign in to comment.
Something went wrong with that request. Please try again.