Пропустить неизменённых пользователей при массовом редактировании значков

Currently, mass editing badges while removing them from previous holders results in people getting a badge removed and immediately regranted, if they are in the intersection of previous and future holders.

This results in a confusing user experience, as users receive a notification about receiving the badge even though nothing has changed.

Also, it clashes with one of our use cases: We would like to drop obsolete badges and award new ones by passing the updated list of holders, while keeping the other holders and the date of awarding unchanged.

Feature-wise, change would be is a strict improvement: By uploading an empty list first, the old behavior is recovered.

1 лайк

По фразам «передача обновлённого списка» и «загрузка пустого списка» складывается впечатление, что вы работаете в консоли Rails, возможно, со списком users.id?

Если это так, может ли помочь получение списка текущих обладателей значков, чтобы вы могли исключить их из операций по снятию или присвоению?

(Запрос к исследованию данных)
-- [params]
-- badge_id :badge

SELECT
    u.id AS user_id
FROM user_badges ub
JOIN users u  ON u.id = ub.user_id
JOIN badges b ON b.id = ub.badge_id
WHERE ub.badge_id = :badge

С помощью этого экспортированного списка, возможно, некоторые запросы и скрипты смогут:

  1. Найти пересечение текущих обладателей значков и вашего списка «будущих обладателей».
  2. Исключить пользователей из этого пересечения из вашего списка «будущих обладателей».
  3. Отозвать значок у всех пользователей, которые не входят в это пересечение.
  4. Загрузить отредактированный список «будущих обладателей», чтобы присвоить значок только новым обладателям.

(Возможно, даже существует способ сделать всё это непосредственно в Rails, но я не силён в этом.)

Нет? В интерфейсе управления значками есть форма массовой выдачи наград, которой я пользуюсь.

Ой, это немного неловко, я пропустил добавление массовых наград.

Может быть, ваша функция стала бы еще одним вариантом при загрузке, что-то вроде этого?

1 лайк