通过数据库查询更改许多用户的界面语言?

我想知道是否有人能帮我处理一个支持请求。

我需要更新所有当前界面语言为 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')

有关批量更新用户偏好的更多示例,请参阅:

1 个赞

如果在 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

我不敢在生产环境上运行更新查询 :blush:

呼—— :sweat_smile:

太棒了,谢谢! :person_bowing:

感谢 @jahan_gagan

我首先备份了数据库 :sweat_smile:

然后我运行了这个:

它完美运行了:

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

非常感谢 :clap:

1 个赞