Eliminación masiva de temas antiguos y dispersos

Hola,

tenemos miles de temas antiguos o obsoletos en nuestro foro que nos gustaría eliminar. Ya busqué en Meta una forma adecuada de hacerlo, pero no encontré una solución apropiada.

¿Sería suficiente iterar sobre una lista de IDs de temas y establecer la bandera deleted_at de cada tema que deseamos “eliminar”, o hay una mejor manera? Sé que es una solución bastante perezosa.

Creo que sería un poco de sobrecarga escribir un plugin extra (pequeño) para aprovechar Topic.destroy en una eliminación masiva.

Saludos cordiales,
Sascha

P.D.
Contexto: Estos temas generan problemas de rastreo y errores soft404, y nos gustaría ocultarlos a los motores de búsqueda. Los temas eliminados se excluyen de nuestro mapa del sitio.

¿Quizás solo quieras dejar de listarlos? Eso debería evitar que sean indexados.

¿Quieres hacerlo una vez o de forma regular?

Hola,

sí, queremos eliminarlos de la lista y evitar que sean indexados.
Esto se hará una sola vez, ya que podemos ajustar manualmente cualquier tema/publicación “defectuoso” futuro que genere problemas de rastreo.

Nuestro foro es muy antiguo (comenzó en 1996) y ha sido migrado en muchas ocasiones, con sintaxis extraña/antigua en texto sin formato y otros elementos. Hemos recopilado todos los temas anteriores a 2015, con menos de 1000 visualizaciones y que aparecen en la Consola de búsqueda de Google como “defectuosos”.

Para nosotros está bien que estos temas simplemente se marquen como eliminados, pero no estábamos muy seguros de si establecer deleted_at directamente es una buena idea o si existen dependencias que debamos considerar. Por lo tanto, si deberíamos optar por el método programático.

Si quieres eliminarlos, creo que realmente debes llamar a topic.delete. Si hay dependencias, eso las gestionará.

¡Gracias por tu consejo! En caso de que decidamos eliminar esos temas por completo, estableceré deleted_at y visible=false mediante una consulta SQL. Esos temas serán eliminados por un trabajo de Sidekiq después de 30 días.

Pero si estos temas deben conservarse, haré lo que sugiriste y los “eliminaré” mediante un pequeño fragmento de Ruby usando topic.delete.

Así que en ambos casos, estos temas serán procesados por Discourse en última instancia, lo que debería encargarse de las posibles dependencias.

¡Muchas gracias!