Тема постоянно удаляется

Вот что у меня получилось:

  1. Пользователь создает тему
  2. Пользователь удаляет пост в теме, планируя удаление (я изменил настройку сайта delete_removed_posts_after на 1)
  3. Тема удаляется по истечении указанного времени
  4. Сотрудник восстанавливает тему и возвращает исходную версию поста (только восстановление вернет пост обратно с сообщением «Тема отозвана автором, будет автоматически удалена через 1 час, если не будет помечена»)
  5. Тема будет удалена снова через некоторое время

Что происходит: Когда пользователь удаляет свой собственный пост в теме, устанавливается свойство user_deleted со значением true. Фоновая задача DestroyOldDeletionStubs запускается каждые 30 минут. Эта задача выполняет функцию PostDestroyer.destroy_stubs, которая ищет в базе данных и удаляет любые посты, у которых user_deleted установлен в true и истек «таймер удаления».

Проблема: Когда сотрудник восстанавливает пост, user_deleted никогда не устанавливается в false, поэтому при следующем запуске DestroyOldDeletionStubs пост будет удален снова.

Решение: Я почти уверен, что нам нужно добавить некоторую логику в функцию staff_recovered, которая установит user_deleted в false (функция user_recovered уже делает это). См. discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub

Быстрое исправление: Восстановите пост в теме, получите его ID, затем перейдите в консоль Rails и выполните:

Post.find_by_id(POST_ID).update(user_deleted: false)

ID поста можно легко найти, добавив .json в конец URL темы. Например, используя эту тему: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. ID поста темы — 632362.

10 лайков