summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2025-01-21 01:50:28 +0000
committerGo MAEDA <maeda@farend.jp>2025-01-21 01:50:28 +0000
commit7ca4cf24c067b8f733bd3000269019c034965b75 (patch)
treec98574bcb25770311874d7f5498fd6b338234267
parent2ffe3fa547767d312158f7dee69dcee3bc9460d8 (diff)
downloadredmine-7ca4cf24c067b8f733bd3000269019c034965b75.tar.gz
redmine-7ca4cf24c067b8f733bd3000269019c034965b75.zip
Refactor `Member#role_ids=` method for improved clarity and effficiency in removing obsolete member roles (#42124).
Patch by Go MAEDA (user:maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@23451 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/member.rb6
1 files changed, 2 insertions, 4 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index f4fedc0db..b0d5c35fc 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -67,15 +67,13 @@ class Member < ApplicationRecord
ids |= member_roles.select {|mr| !mr.inherited_from.nil?}.collect(&:role_id)
new_role_ids = ids - role_ids
+ obsolete_role_ids = role_ids - ids
# Add new roles
new_role_ids.each do |id|
member_roles << MemberRole.new(:role_id => id, :member => self)
end
# Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
- member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)}
- if member_roles_to_destroy.any?
- member_roles_to_destroy.each(&:destroy)
- end
+ member_roles.where(role_id: obsolete_role_ids).destroy_all
member_roles.reload
super(ids)
end