Eliminare tutti i messaggi di un utente in una categoria

Ciao a tutti,

Recentemente ho avuto la necessità di eliminare tutti i post di un utente in una categoria specifica. Mettendo da parte le “discussioni” sull’eliminazione dei contenuti, ho pensato: “oh, facile, basta usare la ricerca e poi selezionare tutti i risultati con le caselle di controllo ed eliminarli”.

Tuttavia, sembra che farlo mi permetta di eliminare i Topic e non tanto i messaggi, anche se la ricerca mi restituisce i messaggi come risultati, non necessariamente i topic (anche se sono presenti anch’essi, sì).

Esiste un modo “sicuro” per fare questo? All’inizio pensavo che sarebbe stato qualcosa di molto estremo a livello di database (e non escludo questa possibilità), ma dato che posso eliminare in blocco oltre 50 topic dall’interfaccia… forse esiste un modo per farlo solo per i messaggi? (O un modo usando la console, non voglio solo “provare” e far esplodere il database :stuck_out_tongue: )

Grazie!

Non ho esperienza personale di queste operazioni, ma credo che si possa effettuare una cancellazione ‘soft’ tramite l’API -

Ci sono anche alcuni argomenti sulla cancellazione ‘hard’ se cerchi ‘rails delete post’.

Se puoi fornire qualche dettaglio in più su cosa stai cercando di ottenere, le persone potrebbero darti consigli più specifici.

Ciao @JammyDodger

Grazie per i link.

Voglio solo eliminare tutti i messaggi di un utente in una categoria specifica. :stuck_out_tongue:

PD: Forse usando la Console? Non voglio solo distruggere il mio DB…

C’è una discussione in corso su una cosa simile in questo argomento: Delete deleted-posts permanently in bulk?

Speriamo che possa fornire qualche spunto?

Scusa per il necro, sono felice di creare un nuovo post se necessario.

Abbiamo una categoria politica e alcuni utenti vorrebbero eliminare tutti i loro post da questa categoria per ovvi motivi. C’è un modo semplice per farlo per loro?

Una soluzione può essere quella di utilizzare la console di Rais.

cd /var/discourse
./launcher enter app
rails c

Quindi puoi seguire il seguente modulo compilando lo slug della categoria e il nome utente.
Copia il codice e incollalo nella console.

Nota:

  • Non elimina il primo post per evitare che l’argomento venga eliminato
  • Se si seleziona una sottocategoria, fornire la categoria padre, ad esempio: slug_genitore/slug_categoria.

:warning: Si prega di effettuare un backup prima di apportare qualsiasi modifica.

[wrap=placeholder key=CATEGORY_SLUG description="Slug della categoria"][/wrap]
[wrap=placeholder key=USERNAME description="Nome utente"][/wrap]

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

Grazie! Questo è fantastico.