Suppression massive des utilisateurs correspondant à un motif d'e-mail

User.joins(:user_emails)
  .where('lower(user_emails.email) LIKE ?', '%domain.com')

En particulier, le signe pourcentage (%) est un caractère générique qui représente zéro ou plusieurs caractères quelconques. Ainsi, %domain.com signifie des adresses e-mail se terminant par domain.com.

Plutôt que User#destroy, il est préférable d’utiliser UserDestroyer :

UserDestroyer.new(Discourse.system_user)
  .destroy(user, delete_posts: true)

Cela permettra à l’utilisateur système de supprimer l’utilisateur et tous ses messages.

Pour résumer :

User.joins(:user_emails)
  .where('lower(user_emails.email) LIKE ?', '%domain.com')
  .find_each do |user|
    UserDestroyer.new(Discourse.system_user).destroy(user, delete_posts: true)
  end

Sachez que cette action est irréversible. Vous voudrez peut-être vérifier les utilisateurs sélectionnés par la requête avant de les supprimer réellement. De plus, je ne suis pas certain des implications en termes de performance si vous supprimez un grand nombre d’utilisateurs et/ou s’ils ont un grand nombre de messages.

Par ailleurs, je ne sais pas si Anonymizing Users in Discourse constitue une alternative pour vous ?

7 « J'aime »