Вы можете найти ID категории и использовать его как дополнительное условие в команде. Например, закрыть все открытые темы в категории «general», созданные до 24 сентября:
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
Такие операции всегда немного волнуют. Обязательно создайте резервную копию базы данных перед их выполнением на случай непредвиденных ситуаций. Также разумно будет провести предварительную проверку, чтобы убедиться, что вы работаете с нужными данными. Один из способов — вывести count тем, к которым будет применена операция. Например:
Topic.where(closed: false).where("created_at < '2024-09-24'").where(category_id: cat_id).count