diff --git a/app/controllers/admin/runner_projects_controller.rb b/app/controllers/admin/runner_projects_controller.rb
index 29307aeab6db8f38ca90022711364c2ac15512f0..5383afdbd205f365df6559f1d5fbf80917ab4f0a 100644
--- a/app/controllers/admin/runner_projects_controller.rb
+++ b/app/controllers/admin/runner_projects_controller.rb
@@ -11,7 +11,9 @@ class Admin::RunnerProjectsController < Admin::ApplicationController
 
     return head(403) if runner.is_shared? || runner.is_locked?
 
-    if @runner.assign_to(@project, current_user)
+    runner_project = @runner.assign_to(@project, current_user)
+
+    if runner_project.persisted?
       redirect_to admin_runner_path(@runner)
     else
       redirect_to admin_runner_path(@runner), alert: 'Failed adding runner to project'
diff --git a/app/controllers/projects/runner_projects_controller.rb b/app/controllers/projects/runner_projects_controller.rb
index 4c01330326958b59e4e9f10f508e3314a874d667..2413e583d7b3330bc06c39ce25a3ae5f9c85710a 100644
--- a/app/controllers/projects/runner_projects_controller.rb
+++ b/app/controllers/projects/runner_projects_controller.rb
@@ -10,8 +10,9 @@ class Projects::RunnerProjectsController < Projects::ApplicationController
     return head(403) unless current_user.ci_authorized_runners.include?(@runner)
 
     path = runners_path(project)
+    runner_project = @runner.assign_to(project, current_user)
 
-    if @runner.assign_to(project, current_user)
+    if runner_project.persisted?
       redirect_to path
     else
       redirect_to path, alert: 'Failed adding runner to project'
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb
index df343fc957ac1cf93f6401d7c7ccd5134c63d6c9..8149929f49215f7ad6782a61d97e892918040ee4 100644
--- a/app/models/ci/runner.rb
+++ b/app/models/ci/runner.rb
@@ -63,7 +63,7 @@ module Ci
     def assign_to(project, current_user = nil)
       self.is_shared = false if shared?
       self.save
-      project.runner_projects.create(runner_id: self.id).persisted?
+      project.runner_projects.create(runner_id: self.id)
     end
 
     def display_name
diff --git a/lib/api/runners.rb b/lib/api/runners.rb
index 2c2610fc2e7c47214197822207d74206f09d6b77..ecc8f2fc5a2307e9e84b103600e246ee56106bd8 100644
--- a/lib/api/runners.rb
+++ b/lib/api/runners.rb
@@ -97,7 +97,9 @@ module API
         runner = get_runner(params[:runner_id])
         authenticate_enable_runner!(runner)
 
-        if runner.assign_to(user_project)
+        runner_project = runner.assign_to(user_project)
+
+        if runner_project.persisted?
           present runner, with: Entities::Runner
         else
           conflict!("Runner was already enabled for this project")