у нас на форуме тысячи старых/устаревших тем, которые мы хотим удалить. Я уже искал в разделе «Мета» подходящий способ сделать это, но не нашёл подходящего решения.
Хватит ли того, чтобы перебрать список ID тем и установить для каждой из них, которую мы хотим «удалить», флаг deleted_at, или есть лучший способ? Я знаю, что это довольно ленивое решение.
Кажется, что писать отдельный (небольшой) плагин, чтобы использовать Topic.destroy для массового удаления, — это немного лишняя работа.
С уважением,
Саша
P.S.
Контекст: эти темы вызывают проблемы при индексации и приводят к ошибкам soft404, поэтому мы хотим скрыть их от поисковых систем. Удалённые темы исключаются из нашей карты сайта.
да, мы хотим исключить их из списка и запретить индексацию.
Это будет сделано один раз, так как любые будущие «некорректные» темы/сообщения, вызывающие проблемы при сканировании, мы сможем исправлять вручную.
Наш форум очень старый (создан в 1996 году) и многократно мигрировал, из-за чего в нём остался странный/устаревший синтаксис в виде необработанного текста и другие артефакты. Мы собрали все темы старше 2015 года, у которых меньше 1000 просмотров и которые отображаются в консоли поиска Google как «некорректные».
Для нас допустимо, если эти темы будут просто помечены как удалённые, но мы не совсем уверены, является ли хорошим решением прямое присваивание значения deleted_at или существуют ли какие-либо зависимости, на которые стоит обратить внимание. Поэтому, если мы должны действовать программно.
Спасибо за ваш совет! В случае, если мы решим полностью удалить эти темы, я установлю deleted_at и visible=false через SQL-запрос. Эти темы будут удалены фоновой задачей Sidekiq через 30 дней.
Но если эти темы должны быть сохранены, я сделаю так, как вы предложили, и «удалю» их с помощью небольшого Ruby-сниппета, используя topic.delete.
Таким образом, в обоих случаях эти темы в конечном итоге обрабатываются самим Discourse, что должно обеспечить корректную работу всех зависимостей.