跳过未更改用户以进行徽章批量编辑

当前,在移除旧持有者的情况下批量编辑徽章会导致那些同时存在于旧持有者和未来持有者交集中的用户收到徽章被移除后立即重新授予的通知。

这会造成令人困惑的用户体验,因为用户会收到有关授予徽章的通知,尽管没有任何变化。

此外,这也与我们的一个用例相冲突:我们希望通过传递更新后的持有者列表来废弃过时的徽章并授予新徽章,同时_保持其他持有者和授予日期不变_。

从功能上讲,这种改变是一种严格的改进:通过先上传一个空列表,可以恢复旧的行为。

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 个赞