diff options
Diffstat (limited to 'app/models/member.rb')
-rw-r--r-- | app/models/member.rb | 12 |
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 |