Richie
(Richie Rich)
2025 年12 月 18 日 07:42
1
我想知道是否有人能帮我处理一个支持请求。
我需要更新所有当前界面语言为 English (US) 的用户的偏好设置,并将它们更改为使用 English (UK)。
我是否可以创建一个数据浏览器查询,以发出某种带有 WHERE 子句的 SQL UPDATE 查询,仅捕获那些使用 English (US) 的用户?
供参考/了解……我们最近花了很多时间更新了 Site texts(站点文本)的 English (UK) 语言版本,在测试中我们发现,任何一年多前注册我们平台的任何人,其默认设置都沿用了旧的默认站点设置 English (US),而不是 English (UK),大约有 15k 用户需要更新。
您不能通过数据浏览器插件运行 UPDATE 查询,因为它严格限制为只读。
对于此类批量更新,请改用 Rails 控制台:
User.where(locale: 'en').update_all(locale: 'en_GB')
有关批量更新用户偏好的更多示例,请参阅:
本指南介绍如何为所有人或特定用户群体编辑 Discourse 中的用户偏好设置。
所需用户权限:系统管理员
需要访问控制台。如果你需要为所有用户或大量用户群体更新用户偏好设置,可以通过 Rails 控制台进行操作。
概述
在本指南中,你将学习:
如何访问 Rails 控制台以进行批量更改
修改用户偏好设置的示例
如何识别设置名称
访问 Rails 控制台
要在你的 Discourse 环境中进入 Rails 控制台,请执行以下命令:
./launcher enter app
rails c
然后,运行一条命令来选择你想要更新的用户群体。
修改用户偏好设置的示例
以下是更新各种用户偏好设置的命令示例:
设置非活跃用户的最后在线日期
为从未登录过的用户设置最后在线日期。
User.where("last_seen_at IS NULL").update_all(last_seen_at: 1.week.ago)
为所有用户禁用邮件列表模式
将用户切换回默认设置,以防止他们收到每…
Richie
(Richie Rich)
2025 年12 月 18 日 08:54
3
如果在 Data Explorer 中运行以下代码:
SELECT
u.locale,
COUNT(*) AS user_count
FROM users u
WHERE u.active = TRUE
AND u.locale IN ('en', 'en_GB')
GROUP BY u.locale
ORDER BY user_count DESC, u.locale
我得到:
locale
user_count
en_GB
19479
en
16014
我需要将 16,014 个 en 用户更新为 en_GB。
我不敢在生产环境上运行更新查询
Richie
(Richie Rich)
2025 年12 月 18 日 09:04
5
感谢 @jahan_gagan
我首先备份了数据库
然后我运行了这个:
它完美运行了:
Loading production environment (Rails 8.0.4)
discourse(prod)=> User.where(locale: 'en').update_all(locale: 'en_GB')
=> 16016
现在我的数据浏览器查询返回:
locale
user_count
en_GB
35493
非常感谢