Hoje, removi e excluí alguns tópicos da categoria “Sem categoria”, e agora a página principal da lista de categorias mostra “-11 no total” para essa categoria.
Pensando bem: a maioria dos tópicos que excluí já havia sido ocultada anteriormente. Será que isso é relevante? Talvez ocultar e excluir cada um separadamente subtraia 1 da contagem por tópico.
Isso se corrigirá automaticamente (com o tempo ou quando algum evento ocorrer)?
Sim, esse é o problema. Consigo reproduzir o erro no meu site de testes. Ocultar um tópico remove o tópico das estatísticas de tópicos da categoria. Se você então excluir o tópico ocultado, ele é novamente subtraído das estatísticas de tópicos da categoria. Isso significa que ocultar e depois excluir um único tópico é contabilizado como a remoção de dois tópicos das estatísticas.
O Discourse executa um job de fundo CategoryStats uma vez a cada 24 horas. Quando esse job for executado, as estatísticas da sua categoria devem ser corrigidas. Se você tiver acesso ao console rails do seu site e não quiser esperar o job ser executado, pode rodar o comando manualmente com:
Category.update_stats
Testei isso no meu próprio site. Executar esse comando corrigiu o problema para mim.
Acontece que, para reproduzir o problema, é necessário ocultar um tópico, aguardar aproximadamente 24 horas para que a tarefa de estatísticas da categoria seja executada e, em seguida, excluir o tópico. Isso fará com que o tópico seja removido duas vezes das estatísticas da categoria. Após mais 24 horas, a tarefa de estatísticas da categoria será executada novamente. Isso deve resolver o problema.
O motivo pelo qual isso ocorre é que a exclusão de um tópico remove imediatamente o tópico das estatísticas da categoria. Já a ocultação de um tópico não causa sua remoção das estatísticas até que a tarefa diária seja executada para atualizar as estatísticas da categoria — essa tarefa verifica tópicos visíveis.