Извините за задержку. Я довольно много об этом думал.
Перевод поста в статус «на рассмотрении» означает его полное удаление и сохранение всех необходимых данных для его воссоздания внутри атрибута payload объекта reviewable. Мне пришлось переписать этот код несколько раз, так как я опасался потери данных в процессе перехода из-за ассоциаций с пометкой dependent: :destroy или dependent: :delete_all. Однако после некоторых тестов я считаю, что это должно быть безопасно.
Реализация этого для темы без ответов или когда речь не идёт о первом посте потребует небольших или умеренных усилий. Вся логика постановки поста в очередь находится в методе NewPostManager#enqueue, поэтому нам нужно будет вынести её в отдельный класс и переиспользовать. Мы всегда добавляем ожидающие одобрения посты в конец темы после утверждения, поэтому добавление их в определённую позицию потребует немного больше работы.
Возврат темы с ответами в статус «на рассмотрении» с использованием этого подхода должен быть более сложным. Сериализация её в объект reviewable кажется излишней. Возможно, мы могли бы временно скрыть тему? Например, мы уже делаем это, когда пост помечается как спам доверенным пользователем.
В качестве альтернативы мы могли бы всегда помечать и удалять (или скрывать) посты, что значительно упростило бы всё. Я не могу придумать причину, по которой полное удаление и постановка поста в очередь были бы лучше.