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 が代替案として検討できるかもしれません。