Mudar o idioma da interface para muitos usuários via consulta ao banco de dados?

Estou a ver se alguém me pode ajudar com um pedido de suporte, por favor.

Preciso de atualizar as preferências de todos os nossos utilizadores que atualmente têm o idioma de interface como English (US) e alterá-los para usar English (UK) em vez disso.

Existe alguma consulta no explorador de dados que eu possa criar para emitir algum tipo de consulta SQL UPDATE com uma cláusula where para apanhar apenas os que estão em English (US)?

Para referência/informação… recentemente dedicámos muito tempo a atualizar todos os nossos Site texts no idioma English (UK) e, durante os testes, descobrimos que qualquer pessoa que se inscreveu na nossa plataforma há mais de um ano estava a usar a definição de site padrão antiga de English (US), em vez de English (UK), aproximadamente 15 mil utilizadores precisam de ser atualizados.

1 curtida

Você não pode executar consultas UPDATE através do plugin Data Explorer porque ele é estritamente somente leitura.

Para atualizações em massa como esta, use o console do Rails em vez disso:

User.where(locale: 'en').update_all(locale: 'en_GB')

Para mais exemplos de atualização de preferências de usuário em massa, consulte:

1 curtida

Se eu executar isto no 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

Eu obtenho:

locale user_count
en_GB 19479
en 16014

Eu preciso ATUALIZAR os 16.014 usuários en para serem en_GB.

E eu não tenho coragem de executar uma consulta de atualização na produção :blush:

[quote=“jahan_gagan, post:2, topic:391635”]Você não pode executar consultas UPDATE através do plugin Data Explorer, pois ele é estritamente somente leitura.
[/quote]

Ufa :sweat_smile:

Fantástico, obrigado! :person_bowing:

Obrigado @jahan_gagan

Eu fiz um backup do banco de dados primeiro :sweat_smile:

Em seguida, executei isto:

Funcionou perfeitamente:

Loading production environment (Rails 8.0.4)
discourse(prod)=> User.where(locale: 'en').update_all(locale: 'en_GB')
=> 16016

E minha consulta no Data Explorer agora retorna:

locale user_count
en_GB 35493

Obrigado :clap:

1 curtida