1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-31 19:47:14 +00:00

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
This commit is contained in:
Go MAEDA 2025-01-21 01:50:28 +00:00
parent 2ffe3fa547
commit 7ca4cf24c0

View File

@ -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