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:
parent
2ffe3fa547
commit
7ca4cf24c0
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user