Migrei um fórum do XenForo para o Discourse, agora há muitas postagens antigas que eu gostaria de fechar. Existe uma maneira de dizer “fechar todos os tópicos com mais de x meses”? Eu já defini isso na categoria, mas só funciona para novos tópicos.
Você pode encontrar o ID da categoria e, em seguida, usá-lo como uma condição adicional no comando. Por exemplo, fechar todos os tópicos abertos na categoria ‘geral’ que foram criados antes de 24 de setembro:
cat_id = Category.find_by_slug('general').id
Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).find_each do |topic|
topic.update_status('closed', true, Discourse.system_user)
end
Esses tipos de operações sempre me deixam um pouco nervoso. Certifique-se de criar um backup do seu banco de dados antes de executá-los, caso algo dê errado. Também pode ser uma boa ideia executar algum tipo de verificação preliminar para garantir que você está operando nos dados corretos. Uma maneira de fazer isso seria retornar a count de tópicos nos quais a operação será realizada. Por exemplo: