summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2018-01-02 15:08:43 +0000
committerDouwe Maan <douwe@gitlab.com>2018-01-02 15:08:43 +0000
commit1dac4271798a3b9ad36c3d985a3f7740cd1c60b3 (patch)
treeffa934d311db4427167d7c11f63a65e929743278 /app
parentd632475b300e3130a90fd580fa423614d8fd2604 (diff)
parent2665aea6275cc82888ed3e3ab3dbe384028d663c (diff)
downloadgitlab-ce-1dac4271798a3b9ad36c3d985a3f7740cd1c60b3.tar.gz
Merge branch 'fj-40053-error-500-members-list' into 'master'
Fix user membership destroy relation Closes #40053 See merge request gitlab-org/gitlab-ce!15970
Diffstat (limited to 'app')
-rw-r--r--app/models/user.rb6
-rw-r--r--app/services/users/destroy_service.rb5
2 files changed, 8 insertions, 3 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index b52f17cd6a8..9d99a3f0c67 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -94,8 +94,8 @@ class User < ActiveRecord::Base
has_one :user_synced_attributes_metadata, autosave: true
# Groups
- has_many :members, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
- has_many :group_members, -> { where(requested_at: nil) }, dependent: :destroy, source: 'GroupMember' # rubocop:disable Cop/ActiveRecordDependent
+ has_many :members
+ has_many :group_members, -> { where(requested_at: nil) }, source: 'GroupMember'
has_many :groups, through: :group_members
has_many :owned_groups, -> { where members: { access_level: Gitlab::Access::OWNER } }, through: :group_members, source: :group
has_many :masters_groups, -> { where members: { access_level: Gitlab::Access::MASTER } }, through: :group_members, source: :group
@@ -103,7 +103,7 @@ class User < ActiveRecord::Base
# Projects
has_many :groups_projects, through: :groups, source: :projects
has_many :personal_projects, through: :namespace, source: :projects
- has_many :project_members, -> { where(requested_at: nil) }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
+ has_many :project_members, -> { where(requested_at: nil) }
has_many :projects, through: :project_members
has_many :created_projects, foreign_key: :creator_id, class_name: 'Project'
has_many :users_star_projects, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
diff --git a/app/services/users/destroy_service.rb b/app/services/users/destroy_service.rb
index 8e20de8dfa5..00db8a2c434 100644
--- a/app/services/users/destroy_service.rb
+++ b/app/services/users/destroy_service.rb
@@ -31,6 +31,11 @@ module Users
return user
end
+ # Calling all before/after_destroy hooks for the user because
+ # there is no dependent: destroy in the relationship. And the removal
+ # is done by a foreign_key. Otherwise they won't be called
+ user.members.find_each { |member| member.run_callbacks(:destroy) }
+
user.solo_owned_groups.each do |group|
Groups::DestroyService.new(group, current_user).execute
end