vor kurzem musste ich alle Beiträge eines Benutzers in einer bestimmten Kategorie löschen. Abgesehen von „Diskussionen" über das Löschen von Inhalten dachte ich mir: „Oh, einfach, einfach die Suche nutzen, dann alle Ergebnisse mit den Kontrollkästchen auswählen und löschen".
Es scheint jedoch, dass dies mir erlaubt, die Themen zu löschen und nicht unbedingt die Nachrichten selbst, obwohl die Suche mir die Nachrichten als Ergebnisse anzeigt, nicht unbedingt die Themen (obwohl diese auch dabei sind, ja).
Gibt es eine „sichere" Möglichkeit, dies zu tun? Zuerst dachte ich, das wäre etwas sehr Extremes für die Datenbank (und ich schließe diese Möglichkeit nicht aus), aber da ich über die Benutzeroberfläche 50+ Themen im Bulk-Modus löschen kann… gibt es vielleicht eine Möglichkeit, dies nur für Nachrichten zu tun? (Oder eine Möglichkeit über die Konsole? Ich möchte einfach nicht „probieren" und die Datenbank zum Absturz bringen :P)
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