Skip to content

Commit 55bf2df

Browse files
authored
Merge pull request #49738 from fatkodima/avoid-unneeded-queries-in-delete
Ignore invalid PRIMARY KEY values in `ActiveRecord::Persistence.delete` method
2 parents 7937092 + 39781d2 commit 55bf2df

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

activerecord/lib/active_record/persistence.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,8 @@ def destroy(id)
563563
# # Delete multiple rows
564564
# Todo.delete([2,3,4])
565565
def delete(id_or_array)
566+
return 0 if id_or_array.nil? || (id_or_array.is_a?(Array) && id_or_array.empty?)
567+
566568
delete_by(primary_key => id_or_array)
567569
end
568570

activerecord/test/cases/persistence_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,17 @@ def test_class_level_delete
13571357
assert_nothing_raised { Reply.find(should_not_be_destroyed_reply.id) }
13581358
end
13591359

1360+
def test_class_level_delete_with_invalid_ids
1361+
assert_no_queries do
1362+
assert_equal 0, Topic.delete(nil)
1363+
assert_equal 0, Topic.delete([])
1364+
end
1365+
1366+
assert_difference -> { Topic.count }, -1 do
1367+
assert_equal 1, Topic.delete(topics(:first).id)
1368+
end
1369+
end
1370+
13601371
def test_class_level_delete_is_affected_by_scoping
13611372
should_not_be_destroyed_reply = Reply.create("title" => "hello", "content" => "world")
13621373
Topic.find(1).replies << should_not_be_destroyed_reply

0 commit comments

Comments
 (0)