User.joins(:user_emails)
.where('lower(user_emails.email) LIKE ?', '%domain.com')
具体来说,百分号(%)是一个通配符,代表零个或多个任意字符。因此,%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 是否可作为您的替代方案?