我想批量删除匹配特定邮箱模式的用户,例如:
- *.xyz
- *.fun
- 等等…
目前我尝试了以下代码:User.find(UserEmail.where("email like '%.fun'").pluck(:user_id)).count。但我无法在 .where() 之后使用 destroy_all 函数…
能否请您帮忙?
非常感谢。
我想批量删除匹配特定邮箱模式的用户,例如:
目前我尝试了以下代码:User.find(UserEmail.where("email like '%.fun'").pluck(:user_id)).count。但我无法在 .where() 之后使用 destroy_all 函数…
能否请您帮忙?
非常感谢。
我也想这样做,同时删除这些用户的所有帖子/主题。
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 是否可作为您的替代方案?
你说得对!是我打错了!