はい、この Rails スクリプトは「すべて既読にする」グローバル機能として機能し、全ユーザーの unread(未読)カウントを強制的に 0 に戻します。そのため、残念ながら、実際の未読数も幻影の未読数もすべてクリアされてしまいます。これは Rails 内で SQL コマンドを実行することで可能です。ただし、根本的なバグを修正するものではありません。また、最近のバックアップがある場合は良いアイデアですが、私は開発用フォーラムでこれをテストし、正常に動作することを確認しました。
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) -- Tracking, Watching, Watching First Post
SQL
# 更新を実行
result = ActiveRecord::Base.connection.execute(sql)
puts "サイト全体で #{result.cmd_tuples} 件の未読トピックを正常にクリアしました。"
# クライアントブラウザがキャッシュされた状態を破棄し、データベースと同期するように強制
MessageBus.publish("/topic-tracking-state", { clear: true })
ユーザーは、クリアされた unread 状態を確認するために、ハードリフレッシュを行う必要がある場合があります。