Temos milhares de tópicos antigos/obsoletos em nosso fórum que gostaríamos de excluir. Já pesquisei no Meta sobre uma maneira adequada de fazer isso, mas não encontrei uma solução adequada.
Seria suficiente iterar por uma lista de IDs de tópicos e definir a flag deleted_at de cada tópico que desejamos “excluir”, ou existe uma maneira melhor? Sei que é uma solução um pouco preguiçosa.
Acho que seria um pouco de sobrecarga escrever um plugin extra (pequeno) para usar Topic.destroy para uma exclusão em massa.
Atenciosamente,
Sascha
P.S.
Contexto: Esses tópicos causam problemas de rastreamento e soft404, e gostaríamos de escondê-los dos mecanismos de busca. Tópicos excluídos são excluídos do nosso sitemap.
sim, queremos removê-los da lista e impedir que sejam indexados.
Isso será feito uma única vez, pois podemos ajustar manualmente qualquer tópico/postagem “problemática” futura que cause problemas de rastreamento.
Nosso fórum é muito antigo (iniciado em 1996) e foi migrado várias vezes, apresentando sintaxe estranha/antiga em texto bruto e outras questões. Reunimos todos os tópicos anteriores a 2015, com menos de 1000 visualizações e que aparecem no Google Search Console como “problemáticos”.
Para nós, está tudo bem se esses tópicos forem apenas marcados como excluídos, mas não tínhamos certeza se definir deleted_at diretamente seria uma boa ideia ou se haveria dependências das quais deveríamos nos preocupar. Portanto, se devemos seguir o caminho programático.
Obrigado pelo seu conselho! Caso optemos por excluir esses tópicos completamente, vou definir deleted_at e visible=false por meio de uma consulta SQL. Esses tópicos serão excluídos por um job do Sidekiq após 30 dias.
Mas, se esses tópicos devem ser mantidos, farei o que você sugeriu e “excluirei” eles por meio de um pequeno trecho de código Ruby usando topic.delete.
Assim, em ambos os casos, esses tópicos serão processados pelo próprio Discourse no final, o que deve cuidar de possíveis dependências.