Alle Nachrichten eines Benutzers in einer Kategorie löschen

Hi guys,

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 :stuck_out_tongue: )

Thanks!

1 „Gefällt mir“

I don’t have personal experience of these, but I believe you can ‘soft’ delete using the API -

And there are a few topics on ‘hard’ deleting if you search for ‘rails delete post’.

If you can give a few more details about what you’re trying to achieve, people may have more specific tips.

Hi @JammyDodger

Thanks for the links.

I just want to delete all messages from a user in a specific category. :stuck_out_tongue:

PD: Maybe using the Console? I just don’t want to nuke my DB…

1 „Gefällt mir“

There’s some ongoing discussion about a similar thing in this topic: Delete deleted-posts permanently in bulk?

Hopefully that can provide some inspiration?

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.