バッジの一括編集で変更のないユーザーをスキップ

現在、以前の保持者からバッジを削除しながら一括編集すると、以前の保持者と将来の保持者の積集合にいる場合、バッジが削除され、すぐに再付与されるという結果になります。

これにより、ユーザーは何も変更されていないにもかかわらずバッジの付与通知を受け取るため、混乱を招くユーザーエクスペリエンスになります。

また、これは私たちのユースケースの1つと競合します。保持者のリストを更新するだけで、廃止されたバッジを削除し、新しいバッジを授与したいのですが、他の保持者と授与日時は変更したくありません

機能面では、空のリストを最初にアップロードすることで、以前の動作が復元されるため、厳密な改善となります。

「いいね!」 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 内でこれら全てを行う方法もあるかもしれませんが、その分野はあまり得意ではありません。)

いいえ?バッジ管理 UX には、私が使用している一括付与フォームがあります。

おっと、少し恥ずかしいですね。バルク賞の追加を見落としていました。

もしかしたら、あなたの機能はアップロード時に別のオプションとして追加できるかもしれません。以下のような感じでしょうか?

「いいね!」 1