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

**URL:** https://meta.discourse.org/t/skip-unchanged-users-for-badge-mass-edit/397539
**Category:** Feature
**Tags:** badges
**Created:** [03.Март.2026 15:03:29 UTC](https://meta.discourse.org/t/skip-unchanged-users-for-badge-mass-edit/397539 "2026-03-03T15:03:29Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![Steradiant](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steradiant/32/360541_2.png) [@Steradiant](https://meta.discourse.org/u/Steradiant)
#### Post date: [03.Март.2026 15:03:29 UTC](https://meta.discourse.org/t/skip-unchanged-users-for-badge-mass-edit/397539/1 "2026-03-03T15:03:29Z")

</div>

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

Это приводит к запутанному пользовательскому опыту: пользователи получают уведомление о получении значка, хотя фактически ничего не изменилось.

Кроме того, это противоречит одному из наших сценариев использования: мы хотим удалять устаревшие значки и присваивать новые, передавая обновлённый список владельцев, при этом _сохраняя остальных владельцев и дату присвоения без изменений_.

С точки зрения функциональности это изменение является строгим улучшением: загрузив сначала пустой список, можно восстановить старое поведение.

---

<div class="post-metadata">

### Author: ![ToddZ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/toddz/32/328350_2.png) [@ToddZ](https://meta.discourse.org/u/ToddZ)
#### Post date: [07.Апрель.2026 07:55:31 UTC](https://meta.discourse.org/t/skip-unchanged-users-for-badge-mass-edit/397539/2 "2026-04-07T07:55:31Z")

</div>

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

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

> **(Запрос к исследованию данных)**
>
> ```sql
> -- [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, но я не силён в этом.)

---

<div class="post-metadata">

### Author: ![Steradiant](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steradiant/32/360541_2.png) [@Steradiant](https://meta.discourse.org/u/Steradiant)
#### Post date: [07.Апрель.2026 14:26:01 UTC](https://meta.discourse.org/t/skip-unchanged-users-for-badge-mass-edit/397539/3 "2026-04-07T14:26:01Z")

</div>

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

---

<div class="post-metadata">

### Author: ![ToddZ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/toddz/32/328350_2.png) [@ToddZ](https://meta.discourse.org/u/ToddZ)
#### Post date: [08.Апрель.2026 07:57:01 UTC](https://meta.discourse.org/t/skip-unchanged-users-for-badge-mass-edit/397539/4 "2026-04-08T07:57:01Z")

</div>

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

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

 ![image](https://global.discourse-cdn.com/meta/original/4X/7/b/0/7b0d1378ad0c525eb490da2958c470dca328bfda.png)
