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 用户需要更新。
1 个赞
您不能通过数据浏览器插件运行 UPDATE 查询,因为它严格限制为只读。
对于此类批量更新,请改用 Rails 控制台:
User.where(locale: 'en').update_all(locale: 'en_GB')
有关批量更新用户偏好的更多示例,请参阅:
This guide explains how to edit a user preference for everyone or a subset of users in Discourse.
Required user level: System Administrator
Console access is required.
If you need to update the user preference for all of your users or a large subset of users, you can do so via the rails console.
Summary
In this guide, you’ll learn:
How to access the Rails console for making bulk changes
Examples of modifying user preferences
How to identify set…
1 个赞
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
非常感谢
1 个赞