J’ai migré un forum de XenForo vers Discourse, et il y a maintenant beaucoup d’anciens messages que j’aimerais fermer. Y a-t-il un moyen de dire “fermer tous les sujets plus anciens que x mois” ? J’ai déjà configuré cela dans la catégorie, mais cela ne fonctionne que pour les nouveaux sujets.
Vous pouvez trouver l’ID de la catégorie, puis l’utiliser comme condition supplémentaire dans la commande. Par exemple, fermez tous les sujets ouverts dans la catégorie ‘general’ qui ont été créés avant le 24 septembre :
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
Ce type d’opérations me rend toujours un peu nerveux. Assurez-vous de créer une sauvegarde de votre base de données avant de les exécuter au cas où quelque chose tournerait mal. Il pourrait également être judicieux d’effectuer une sorte de vérification préliminaire pour vous assurer que vous opérez sur les bonnes données. Une façon de le faire serait de retourner le count des sujets sur lesquels l’opération sera effectuée. Par exemple :