Я ищу способ удалить секретные сообщения старше определённого возраста из всех тем.
Как правило, мы используем секретные сообщения для обсуждения потенциальных действий модераторов, но после того как действие было предпринято, эти сообщения теряют свою полезность и со временем всё больше превращаются в информационный шум.
Я мог бы удалить сообщения старше определённого возраста с post_type=4 (секретное сообщение), но это может привести к «висячим» или некорректным данным в базе данных, либо быть запрещено из-за ограничений ключей форума.
whispers = Post.where(post_type: 4).where("created_at < ?", 1.year.ago)
whispers.find_each do |w|
PostDestroyer.new(Discourse.system_user, w, skip_staff_log: true).destroy
putc "."
end
Это фактически имитирует удаление каждого поста вручную пользователем System с помощью кнопки удаления. Я добавил параметр skip_staff_log, чтобы не засорять логи сотрудников, но вы можете убрать его, если хотите, чтобы действие было зафиксировано в логах.