Elimina in blocco gli utenti che corrispondono a un modello di email

Vorrei eliminare in blocco gli utenti che corrispondono a un pattern di email come:

  • *.xyz
  • *.fun
  • ecc.

Finora ho provato questo: User.find(UserEmail.where("email like '%.fun'").pluck(:user_id)).count. Ma non riesco a utilizzare la funzione destroy_all dopo un .where()

Potreste aiutarmi?
Grazie mille.

Vorrei fare lo stesso, oltre a cancellare anche tutti i post/argomenti di quegli utenti.

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

In particolare, il segno percentuale (%) è un carattere jolly che rappresenta zero o più caratteri qualsiasi. Quindi %domain.com indica email che terminano con domain.com.

Invece di User#destroy, è meglio utilizzare UserDestroyer:

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

Questo farà sì che l’utente di sistema cancelli l’utente e tutti i suoi post.

Per riassumere:

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

Fai attenzione: questa operazione è irreversibile. Potresti voler verificare gli utenti selezionati dalla query prima di cancellarli effettivamente. Inoltre, non sono sicuro delle implicazioni sulle prestazioni se stai cancellando un gran numero di utenti e/o se hanno un gran numero di post.

A proposito, non sono sicuro che Anonymizing Users in Discourse possa essere un’alternativa per te?

Ciao @xrav3nz! Questa risposta è fantastica! :open_mouth:
È esattamente quello che mi serve, lo proverò subito, confermando prima l’importo con un semplice count() come hai suggerito.

Una nota: non dovrebbe essere delete_post: true invece di false?

Il mio caso d’uso è molto semplice: ho importato un vecchio phpBB (grazie a @gerhard) e ha funzionato perfettamente, ma questo vecchio forum era completamente inquinato da account falsi… Non hanno pubblicato nessun messaggio. Tutti gli indirizzi email sembrano .fun o .xyz.

Sì, hai ragione! Ho fatto un errore di battitura!