User.joins(:user_emails)
.where('lower(user_emails.email) LIKE ?', '%domain.com')
특히, 백분율 기호(%)는 어떤 문자든 0개 이상을 나타내는 와일드카드입니다. 따라서 %domain.com은 domain.com으로 끝나는 이메일을 의미합니다.
User#destroy 대신 UserDestroyer를 사용하는 것이 좋습니다:
UserDestroyer.new(Discourse.system_user)
.destroy(user, delete_posts: true)
이렇게 하면 시스템 사용자가 해당 사용자와 모든 게시물을 삭제합니다.
요약하면 다음과 같습니다:
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
이 작업은 되돌릴 수 없음을 유의하세요. 실제로 삭제하기 전에 쿼리로 선택된 사용자를 확인하는 것이 좋습니다. 또한, 많은 수의 사용자를 삭제하거나 해당 사용자에게 게시물이 매우 많은 경우 성능에 어떤 영향을 미칠지는 확실하지 않습니다.
다른 참고 사항으로, Anonymizing Users in Discourse 이 대안이 될 수 있는지 모르겠습니다.