User.joins(:user_emails)
.where('lower(user_emails.email) LIKE ?', '%domain.com')
Insbesondere ist das Prozentzeichen (%) ein Platzhalter, der null oder mehr beliebige Zeichen repräsentiert. %domain.com bedeutet also E-Mails, die mit domain.com enden.
Statt User#destroy ist es am besten, den UserDestroyer zu verwenden:
UserDestroyer.new(Discourse.system_user)
.destroy(user, delete_posts: true)
Dadurch wird der Benutzer und alle seine Beiträge vom Systembenutzer gelöscht.
Zusammengefasst:
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
Sei dir bewusst, dass dies irreversibel ist. Möglicherweise möchtest du die vom Abfrage ausgewählten Benutzer überprüfen, bevor du sie tatsächlich löschst. Außerdem bin ich mir der Leistungsimplikationen nicht sicher, wenn du eine große Anzahl von Benutzern löschst und/oder wenn diese eine große Anzahl von Beiträgen haben.
Übrigens: Ist Anonymizing Users in Discourse eine Alternative für dich?