Счетчик непрочитанных показывает «Непрочитанные (14)», но /unread пуст

Хорошо, этот скрипт Rails будет действовать как глобальная функция «Отметить все как прочитанное» и принудительно сбросит счётчик unread до 0 для всех пользователей, поэтому, к сожалению, он очистит любые корректные непрочитанные сообщения, а также любые фиктивные непрочитанные. Мы можем сделать это с помощью SQL-команды в Rails. Но имейте в виду, что это не исправляет корневую ошибку. Также это хорошая идея, если у вас есть свежая резервная копия, но я протестировал это на своём тестовом форуме, и всё сработало.

cd /var/discourse
./launcher enter app
rails c

Вставьте весь следующий блок и нажмите Enter

sql = <<~SQL
  UPDATE topic_users
  SET last_read_post_number = topics.highest_post_number
  FROM topics
  WHERE topics.id = topic_users.topic_id
    AND COALESCE(topic_users.last_read_post_number, 0) < topics.highest_post_number
    AND topic_users.notification_level IN (2, 3, 4) -- Отслеживание, Наблюдение, Наблюдение за первым сообщением
SQL

# выполнить обновление
result = ActiveRecord::Base.connection.execute(sql)
puts "Успешно очищено #{result.cmd_tuples} непрочитанных тем на всём сайте."

# принудительно заставить браузеры клиентов сбросить кэшированное состояние и синхронизироваться с базой данных
MessageBus.publish("/topic-tracking-state", { clear: true })

Пользователям, возможно, придётся выполнить жёсткую перезагрузку, чтобы увидеть очищённое состояние unread.

3 лайка