class UserRoleService def initialize(user, role_names) @user = user @role_names = role_names.reject(&:blank?).uniq end def update_roles @user.roles = Role.where(name: @role_names) end private def remove_unassigned_roles current_roles = @user.roles.pluck(:name) roles_to_remove = current_roles - @role_names roles_to_remove.each { |role| @user.remove_role(role) } end def add_new_roles roles_to_add = @role_names - @user.roles.pluck(:name) roles_to_add.each { |role| @user.add_role(role) } end end