Это самый чистый способ удалить посты:
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, чтобы не засорять логи сотрудников, но вы можете убрать его, если хотите, чтобы действие было зафиксировано в логах.
Как вы думаете, это решит вашу задачу?