Puedes encontrar el ID de la categoría y luego usarlo como una condición adicional en el comando. Por ejemplo, cerrar todos los temas abiertos en la categoría ‘general’ que se crearon antes del 24 de septiembre:
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
Este tipo de operaciones siempre me ponen un poco nervioso. Asegúrate de crear una copia de seguridad de tu base de datos antes de ejecutarlas en caso de que algo salga mal. También podría ser una buena idea ejecutar algún tipo de verificación preliminar para asegurarte de que estás operando sobre los datos correctos. Una forma de hacerlo sería devolver el count de temas sobre los que se realizará la operación. Por ejemplo:
Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).count