Iceman
(Iceman)
1
大家好,
最近我需要删除某个用户在特定类别下的所有帖子。暂且不论“删除内容”引发的争论,我心想:“哦,这很简单,直接用搜索功能,然后勾选所有结果并删除它们。”
然而,这样做似乎只能删除主题,而无法真正删除消息,尽管搜索结果显示的是消息,而不一定是主题(当然,主题也出现在结果中)。
有没有一种“安全”的方法来实现这一点?起初我以为这可能涉及到对数据库进行非常极端的操作(我并未排除这种可能性),但既然我可以通过界面批量删除 50 多个主题……是否有一种方法可以仅针对消息进行批量删除呢?(或者通过控制台操作的方法,我只是不想“尝试”后把数据库搞垮 :P)
谢谢!
我本人没有这方面的实际操作经验,但我相信可以通过 API 进行“软”删除——
此外,如果你搜索"rails delete post",还能找到一些关于“硬”删除的讨论主题。
如果你能提供更多关于你希望实现的具体目标的细节,大家或许能给出更具体的建议。
Iceman
(Iceman)
3
你好 @JammyDodger
感谢提供的链接。
我只是想删除特定分类中某个用户的所有消息。
附:也许可以使用控制台?我只是不想直接破坏我的数据库……
抱歉打扰了,如果需要,我可以创建一个新帖子。
我们有一个政治类别,一些用户希望删除他们在这个类别中的所有帖子,原因显而易见。有没有什么方法可以方便地为他们做到这一点?
可以使用 Rais 控制台来解决此问题。
cd /var/discourse
./launcher enter app
rails c
然后,您可以填写类别 slug和用户名来遵循以下形式。
复制代码并将其粘贴到控制台中。
注意:
- 它不会删除第一个帖子,以避免主题被删除
- 如果您定位的是子类别,请提供父类别,例如:
parent_cat_slug/cat_slug。
在进行任何更改之前,请务必进行备份。
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