diff --git a/ee/app/workers/vulnerabilities/remove_all_vulnerabilities_worker.rb b/ee/app/workers/vulnerabilities/remove_all_vulnerabilities_worker.rb
index 1ddfacbc571c7bb463a301e8e3d5c57f2b2622c5..8b24637fdd61f24a7f01b3e61a17197ec8814c23 100644
--- a/ee/app/workers/vulnerabilities/remove_all_vulnerabilities_worker.rb
+++ b/ee/app/workers/vulnerabilities/remove_all_vulnerabilities_worker.rb
@@ -53,30 +53,31 @@ def perform(project_id)
 
     private
 
-    # rubocop:disable Style/SymbolProc -- for some reason, using &:delete_all fails with wrong number of arguments
     def drop_by_project_id(project_id)
       MODELS_TO_DROP_BY_PROJECT_ID.each do |model|
-        model
-          .by_projects(project_id)
-          .each_batch(of: BATCH_SIZE) { |b| b.delete_all }
+        loop do
+          deleted = model.by_projects(project_id).limit(BATCH_SIZE).delete_all
+          break if deleted == 0
+        end
       end
     end
 
     def drop_by_finding_id(finding_ids)
       MODELS_TO_DROP_BY_FINDING_ID.each do |model|
-        model
-          .by_finding_id(finding_ids)
-          .each_batch(of: BATCH_SIZE) { |b| b.delete_all }
+        loop do
+          deleted = model.by_finding_id(finding_ids).limit(BATCH_SIZE).delete_all
+          break if deleted == 0
+        end
       end
     end
 
     def drop_by_vulnerability_id(vulnerability_ids)
       MODELS_TO_DROP_BY_VULNERABILITY_ID.each do |model|
-        model
-          .by_vulnerability(vulnerability_ids)
-          .each_batch(of: BATCH_SIZE) { |b| b.delete_all }
+        loop do
+          deleted = model.by_vulnerability(vulnerability_ids).limit(BATCH_SIZE).delete_all
+          break if deleted == 0
+        end
       end
     end
-    # rubocop:enable Style/SymbolProc
   end
 end