From 7ca4cf24c067b8f733bd3000269019c034965b75 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Tue, 21 Jan 2025 01:50:28 +0000 Subject: [PATCH] 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 --- app/models/member.rb | 6 ++---- 1 file 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