diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 43801e2733bf2100b202889cb83a57982b8b0481..e54d970c6710725ca32d8485dea0376f84f59d18 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -853,14 +853,7 @@ Style/SymbolProc:
 # Configuration parameters: AllowImplicitReturn, AllowedReceivers.
 Rails/SaveBang:
   Exclude:
-    - 'ee/spec/controllers/projects/environments_controller_spec.rb'
-    - 'ee/spec/controllers/projects/issues_controller_spec.rb'
-    - 'ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb'
     - 'ee/spec/controllers/projects/merge_requests_controller_spec.rb'
-    - 'ee/spec/controllers/projects/project_members_controller_spec.rb'
-    - 'ee/spec/controllers/projects/service_desk_controller_spec.rb'
-    - 'ee/spec/controllers/projects/subscriptions_controller_spec.rb'
-    - 'ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb'
     - 'ee/spec/controllers/subscriptions_controller_spec.rb'
     - 'ee/spec/factories/ci/job_artifacts.rb'
     - 'ee/spec/factories/epics.rb'
diff --git a/changelogs/unreleased/rails-save-bang-3.yml b/changelogs/unreleased/rails-save-bang-3.yml
new file mode 100644
index 0000000000000000000000000000000000000000..70760d6c038b9b87772687ecc611de3f03dc59bb
--- /dev/null
+++ b/changelogs/unreleased/rails-save-bang-3.yml
@@ -0,0 +1,5 @@
+---
+title: Refactor projects controllers specs to fix SaveBang Cop
+merge_request: 36920
+author: Rajendra Kadam
+type: fixed
diff --git a/ee/spec/controllers/projects/environments_controller_spec.rb b/ee/spec/controllers/projects/environments_controller_spec.rb
index 1672da7d1eb3a523e9352067f64b57253d611ebe..81736236872f89593608abf0a2089148ba91e127 100644
--- a/ee/spec/controllers/projects/environments_controller_spec.rb
+++ b/ee/spec/controllers/projects/environments_controller_spec.rb
@@ -99,7 +99,7 @@
 
       context 'when user has access to it' do
         before do
-          protected_environment.deploy_access_levels.create(user: user)
+          protected_environment.deploy_access_levels.create!(user: user)
 
           get :terminal, params: environment_params
         end
diff --git a/ee/spec/controllers/projects/issues_controller_spec.rb b/ee/spec/controllers/projects/issues_controller_spec.rb
index 6cc27103f62bf092307c465a852489f5b9df6a5f..49ceffd1c4c8c3b40ce1a842c6903784aaed68e5 100644
--- a/ee/spec/controllers/projects/issues_controller_spec.rb
+++ b/ee/spec/controllers/projects/issues_controller_spec.rb
@@ -184,7 +184,7 @@ def perform(method, action, opts = {})
       before do
         sign_in(user)
         allow(Gitlab).to receive(:com?).and_return(true)
-        discussion.update(author: user)
+        discussion.update!(author: user)
       end
 
       shared_context 'non inclusion of gitlab team member badge' do |result|
diff --git a/ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb b/ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb
index d34260d2efeade5c81815453355dfe538a7a1aaa..5a97d775272af31ea450f1ca08195e29e441d148 100644
--- a/ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb
+++ b/ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb
@@ -32,7 +32,7 @@ def create_merge_request(overrides = {})
 
     context 'the approvals_before_merge param' do
       before do
-        project.update(approvals_before_merge: 2)
+        project.update!(approvals_before_merge: 2)
       end
 
       context 'when it is less than the one in the target project' do
@@ -83,8 +83,8 @@ def create_merge_request(overrides = {})
       context 'when the target project is a fork of a deleted project' do
         before do
           original_project = create(:project)
-          project.update(forked_from_project: original_project, approvals_before_merge: 4)
-          original_project.update(pending_delete: true)
+          project.update!(forked_from_project: original_project, approvals_before_merge: 4)
+          original_project.update!(pending_delete: true)
 
           create_merge_request(approvals_before_merge: 3)
         end
@@ -105,7 +105,7 @@ def create_merge_request(overrides = {})
 
       before do
         project.add_developer(new_approver)
-        project.update(disable_overriding_approvers_per_merge_request: disable_overriding_approvers_per_merge_request)
+        project.update!(disable_overriding_approvers_per_merge_request: disable_overriding_approvers_per_merge_request)
 
         create_merge_request(
           approval_rules_attributes: [
diff --git a/ee/spec/controllers/projects/merge_requests_controller_spec.rb b/ee/spec/controllers/projects/merge_requests_controller_spec.rb
index 0a209264201557504e8e634a6a9246042817d2af..5337be59f9d508c3b7d1c38b285eafe3df62b285 100644
--- a/ee/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/ee/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -144,7 +144,7 @@ def update_merge_request(params = {})
 
     context 'when the merge request requires approval' do
       before do
-        project.update(approvals_before_merge: 1)
+        project.update!(approvals_before_merge: 1)
       end
 
       it_behaves_like 'update invalid issuable', MergeRequest
@@ -152,12 +152,12 @@ def update_merge_request(params = {})
 
     context 'overriding approvers per MR' do
       before do
-        project.update(approvals_before_merge: 1)
+        project.update!(approvals_before_merge: 1)
       end
 
       context 'enabled' do
         before do
-          project.update(disable_overriding_approvers_per_merge_request: false)
+          project.update!(disable_overriding_approvers_per_merge_request: false)
         end
 
         it 'updates approvals' do
@@ -195,7 +195,7 @@ def update_merge_request(params = {})
 
         before do
           project.add_developer(new_approver)
-          project.update(disable_overriding_approvers_per_merge_request: true)
+          project.update!(disable_overriding_approvers_per_merge_request: true)
         end
 
         it 'does not update approvals_before_merge' do
@@ -364,7 +364,7 @@ def update_merge_request(params = {})
 
         before do
           upstream.add_developer(user)
-          upstream.update(approvals_before_merge: 2)
+          upstream.update!(approvals_before_merge: 2)
         end
 
         it_behaves_like 'approvals_before_merge param'
diff --git a/ee/spec/controllers/projects/project_members_controller_spec.rb b/ee/spec/controllers/projects/project_members_controller_spec.rb
index decceef4e7d31c146435341387cff4fd3bdb3013..6bcd29ed428b919bcedca14c2915b978dcd03dab 100644
--- a/ee/spec/controllers/projects/project_members_controller_spec.rb
+++ b/ee/spec/controllers/projects/project_members_controller_spec.rb
@@ -32,7 +32,7 @@
 
       context 'and the project group has membership lock enabled' do
         before do
-          project.namespace.update(membership_lock: true)
+          project.namespace.update!(membership_lock: true)
         end
 
         it 'responds with 403' do
@@ -64,7 +64,7 @@
 
     context 'when project group has membership lock enabled' do
       before do
-        project.namespace.update(membership_lock: true)
+        project.namespace.update!(membership_lock: true)
       end
 
       it 'responds with 403' do
@@ -90,7 +90,7 @@
 
     context 'when project group has membership lock enabled' do
       before do
-        project.namespace.update(membership_lock: true)
+        project.namespace.update!(membership_lock: true)
       end
 
       it 'responds with 403' do
diff --git a/ee/spec/controllers/projects/subscriptions_controller_spec.rb b/ee/spec/controllers/projects/subscriptions_controller_spec.rb
index a2c4d58f8b7828f450f19f47b3c57b40981ee9a3..93ce8a9835952b6729df812f8b6cfd4aa859dee7 100644
--- a/ee/spec/controllers/projects/subscriptions_controller_spec.rb
+++ b/ee/spec/controllers/projects/subscriptions_controller_spec.rb
@@ -18,7 +18,7 @@
 
     before do
       plan_limits = create(:plan_limits, :default_plan)
-      plan_limits.update(ci_project_subscriptions: 2)
+      plan_limits.update!(ci_project_subscriptions: 2)
     end
 
     context 'when user is authorized' do
@@ -80,7 +80,7 @@
 
           context 'when project is not public' do
             before do
-              upstream_project.update(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
+              upstream_project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
             end
 
             it 'does not create a new subscription' do
diff --git a/ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb b/ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb
index 409b64c7d611403f82a7ffe203242375661b6558..d06d9329caa7d18aefc4c5b52c5f66d4d7249470 100644
--- a/ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb
+++ b/ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb
@@ -52,7 +52,7 @@
             pipeline: create(:ci_pipeline)
           )
 
-          feedback.save(validate: false)
+          feedback.save!(validate: false)
         end
 
         it 'ignores feedback in other project' do