Eliminar todos los mensajes de un usuario en una categoría

¡Hola a todos!

Recientemente tuve la necesidad de eliminar todas las publicaciones de un usuario en una categoría específica. Dejando de lado los “debates” sobre la eliminación de contenido, pensé: “ah, fácil, solo usa la búsqueda, selecciona todos los resultados con las casillas de verificación y elimínalos”.

Sin embargo, parece que al hacerlo puedo eliminar los temas y no tanto los mensajes, aunque la búsqueda me devuelve los mensajes como resultados, no necesariamente los temas (aunque también aparecen, sí).

¿Existe una forma “segura” de hacer esto? Al principio pensé que podría ser algo muy extremo a nivel de base de datos (y no descarto esa posibilidad), pero como puedo eliminar en masa más de 50 temas desde la interfaz… ¿quizás haya una forma de hacerlo solo para los mensajes? (O una manera de usar la consola; simplemente no quiero “probar” y hacer explotar la base de datos :P)

¡Gracias!

1 me gusta

No tengo experiencia personal con esto, pero creo que puedes eliminar “suavemente” usando la API:

Y hay varios temas sobre la eliminación “dura” si buscas “rails delete post”.

Si puedes dar más detalles sobre lo que intentas lograr, es posible que la gente tenga consejos más específicos.

Hola @JammyDodger

Gracias por los enlaces.

Solo quiero eliminar todos los mensajes de un usuario en una categoría específica. :stuck_out_tongue:

PD: ¿Quizás usando la Consola? Solo no quiero arruinar mi base de datos…

1 me gusta

Hay una discusión en curso sobre algo similar en este tema: Delete deleted-posts permanently in bulk?

¿Esperamos que eso pueda proporcionar alguna inspiración?

Disculpas por la necro, feliz de crear una nueva publicación si es necesario.

Tenemos una categoría de política y algunos usuarios querrían eliminar todas sus publicaciones de esta categoría por razones obvias. ¿Hay alguna manera de hacer esto fácilmente para ellos?

Una solución puede ser usar la consola de Rais.

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

Luego puedes seguir el siguiente formulario rellenando el category slug y username.
Copias el código y lo pegas en la consola.

Nota:

  • No elimina la primera publicación para evitar que se elimine el tema
  • Si te diriges a una subcategoría, proporciona la principal, por ejemplo: parent_cat_slug/cat_slug.

:warning: Por favor, haz una copia de seguridad antes de realizar cualquier cambio.

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 me gusta

¡Gracias! Esto es fantástico.