summaryrefslogtreecommitdiffstats
path: root/app/models/member.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/member.rb')
-rw-r--r--app/models/member.rb12
1 files changed, 5 insertions, 7 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index ffad20754..1f597c96c 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -45,9 +45,9 @@ class Member < ApplicationRecord
end)
alias :base_reload :reload
- def reload(*args)
+ def reload(*)
@managed_roles = nil
- base_reload(*args)
+ base_reload(*)
end
def role
@@ -64,18 +64,16 @@ class Member < ApplicationRecord
def role_ids=(arg)
ids = (arg || []).collect(&:to_i) - [0]
# Keep inherited roles
- ids += member_roles.select {|mr| !mr.inherited_from.nil?}.collect(&:role_id)
+ 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