删除某用户在某分类中的所有消息

大家好,

最近我需要删除某个用户在特定类别下的所有帖子。暂且不论“删除内容”引发的争论,我心想:“哦,这很简单,直接用搜索功能,然后勾选所有结果并删除它们。”

然而,这样做似乎只能删除主题,而无法真正删除消息,尽管搜索结果显示的是消息,而不一定是主题(当然,主题也出现在结果中)。

有没有一种“安全”的方法来实现这一点?起初我以为这可能涉及到对数据库进行非常极端的操作(我并未排除这种可能性),但既然我可以通过界面批量删除 50 多个主题……是否有一种方法可以仅针对消息进行批量删除呢?(或者通过控制台操作的方法,我只是不想“尝试”后把数据库搞垮 :P)

谢谢!

我本人没有这方面的实际操作经验,但我相信可以通过 API 进行“软”删除——

此外,如果你搜索"rails delete post",还能找到一些关于“硬”删除的讨论主题。

如果你能提供更多关于你希望实现的具体目标的细节,大家或许能给出更具体的建议。

你好 @JammyDodger

感谢提供的链接。

我只是想删除特定分类中某个用户的所有消息。:stuck_out_tongue:

附:也许可以使用控制台?我只是不想直接破坏我的数据库……

关于类似的问题,在此主题中有一些正在进行的讨论:Delete deleted-posts permanently in bulk?

希望这能提供一些启发?

抱歉打扰了,如果需要,我可以创建一个新帖子。

我们有一个政治类别,一些用户希望删除他们在这个类别中的所有帖子,原因显而易见。有没有什么方法可以方便地为他们做到这一点?

可以使用 Rais 控制台来解决此问题。

cd /var/discourse
./launcher enter app
rails c

然后,您可以填写类别 slug用户名来遵循以下形式。
复制代码并将其粘贴到控制台中。

注意:

  • 它不会删除第一个帖子,以避免主题被删除
  • 如果您定位的是子类别,请提供父类别,例如:parent_cat_slug/cat_slug

:warning: 在进行任何更改之前,请务必进行备份。

Category
  .find_by_slug_path_with_id("=CATEGORY_SLUG=")
  .tap do |c|
    u = User.find_by_username("=USERNAME=")
    Post
      .joins(:topic)
      .where(user_id: u.id)
      .where("topics.category_id = ?", c.id)
      .where.not(post_number: 1)
      .where(deleted_at: nil)
      .find_each { |p| PostDestroyer.new(Discourse.system_user, p).destroy }
  end

谢谢!这太棒了。