Recently I had the need to delete all posts from a user in a specific category. Leaving aside “debates” on deleting content I thought “oh, easy, just use the search and then pick all the results using the checkboxes and delete them”.
However, it seems that doing so allows me to delete The Topics and not so much the messages, even though the search is giving me the messages as results, not necessarily the topics (although they are there as well, yes).
Is there a “safe” way of doing this? At first I thought that I would be something very extreme to the DB (and I don’t discard that possibility) but since I can bulk-delete 50+ topics from the UI… maybe there is a way of doing that for messages only? (Or a way using the console, I just don’t want to “try” and blow up the DB )
Entschuldigung für die Necro, ich erstelle gerne einen neuen Beitrag, falls erforderlich.
Wir haben eine Politik-Kategorie, und einige Benutzer möchten aus offensichtlichen Gründen alle ihre Beiträge in dieser Kategorie löschen. Gibt es eine einfache Möglichkeit, dies für sie zu tun?
Eine Lösung kann die Verwendung der Rais-Konsole sein.
cd /var/discourse
./launcher enter app
rails c
Dann können Sie dem folgenden Formular folgen, indem Sie den Kategori-Slug und den Benutzernamen ausfüllen.
Sie kopieren den Code und fügen ihn in die Konsole ein.
Hinweis:
Der erste Beitrag wird nicht gelöscht, um zu vermeiden, dass das Thema gelöscht wird.
Wenn Sie eine Unterkategorie ansprechen, geben Sie die übergeordnete Kategorie an, z. B.: parent_cat_slug/cat_slug.
Bitte erstellen Sie vor allen Änderungen ein Backup.
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