Alle Nachrichten eines Benutzers in einer Kategorie löschen

Hallo zusammen,

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)

Danke!

1 „Gefällt mir“

Ich habe keine persönlichen Erfahrungen damit, aber ich glaube, man kann über die API „weich" löschen –

Und es gibt einige Themen zum „harten" Löschen, wenn du nach „rails delete post" suchst.

Wenn du etwas mehr Details dazu gibst, was du erreichen möchtest, haben die Leute vielleicht konkretere Tipps.

Hallo @JammyDodger,

danke für die Links.

Ich möchte einfach alle Nachrichten eines Benutzers in einer bestimmten Kategorie löschen. :stuck_out_tongue:

PD: Vielleicht über die Konsole? Ich möchte nur nicht meine Datenbank zerstören…

1 „Gefällt mir“

In diesem Thema gibt es eine laufende Diskussion zu einem ähnlichen Thema: Delete deleted-posts permanently in bulk?

Vielleicht kann das ja einige Ideen liefern?

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.

:warning: 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
1 „Gefällt mir“

Vielen Dank! Das ist fantastisch.