Массовое удаление старых и разрозненных тем

Привет,

у нас на форуме тысячи старых/устаревших тем, которые мы хотим удалить. Я уже искал в разделе «Мета» подходящий способ сделать это, но не нашёл подходящего решения.

Хватит ли того, чтобы перебрать список ID тем и установить для каждой из них, которую мы хотим «удалить», флаг deleted_at, или есть лучший способ? Я знаю, что это довольно ленивое решение.

Кажется, что писать отдельный (небольшой) плагин, чтобы использовать Topic.destroy для массового удаления, — это немного лишняя работа.

С уважением,
Саша

P.S.
Контекст: эти темы вызывают проблемы при индексации и приводят к ошибкам soft404, поэтому мы хотим скрыть их от поисковых систем. Удалённые темы исключаются из нашей карты сайта.

Возможно, вы просто хотите скрыть их из списка? Это должно предотвратить их индексацию.

Хотите сделать это один раз или регулярно?

Здравствуйте,

да, мы хотим исключить их из списка и запретить индексацию.
Это будет сделано один раз, так как любые будущие «некорректные» темы/сообщения, вызывающие проблемы при сканировании, мы сможем исправлять вручную.

Наш форум очень старый (создан в 1996 году) и многократно мигрировал, из-за чего в нём остался странный/устаревший синтаксис в виде необработанного текста и другие артефакты. Мы собрали все темы старше 2015 года, у которых меньше 1000 просмотров и которые отображаются в консоли поиска Google как «некорректные».

Для нас допустимо, если эти темы будут просто помечены как удалённые, но мы не совсем уверены, является ли хорошим решением прямое присваивание значения deleted_at или существуют ли какие-либо зависимости, на которые стоит обратить внимание. Поэтому, если мы должны действовать программно.

Если вы хотите их удалить, то, думаю, вам действительно нужно вызвать topic.delete. Если есть какие-либо зависимости, метод обработает их.

Спасибо за ваш совет! В случае, если мы решим полностью удалить эти темы, я установлю deleted_at и visible=false через SQL-запрос. Эти темы будут удалены фоновой задачей Sidekiq через 30 дней.
Но если эти темы должны быть сохранены, я сделаю так, как вы предложили, и «удалю» их с помощью небольшого Ruby-сниппета, используя topic.delete.
Таким образом, в обоих случаях эти темы в конечном итоге обрабатываются самим Discourse, что должно обеспечить корректную работу всех зависимостей.

Огромное спасибо!