Sie können die Kategorie-ID finden und sie dann als zusätzliche Bedingung im Befehl verwenden. Schließen Sie beispielsweise alle offenen Themen in der Kategorie „Allgemein“, die vor dem 24. September erstellt wurden:
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
Diese Art von Operationen macht mich immer ein wenig nervös. Stellen Sie sicher, dass Sie ein Backup Ihrer Datenbank erstellen, bevor Sie sie ausführen, falls etwas schief geht. Es könnte auch eine gute Idee sein, eine Art Vorabprüfung durchzuführen, um sicherzustellen, dass Sie die richtigen Daten bearbeiten. Eine Möglichkeit, dies zu tun, wäre die Rückgabe der count von Themen, auf die die Operation angewendet wird. Zum Beispiel:
Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).count