# 未读计数显示“未读 (14)”，但 /unread 为空

**URL:** https://meta.discourse.org/t/unread-count-shows-unread-14-but-unread-is-empty/403986
**Category:** Bug
**Created:** [2026 年5 月 28 日 10:00 UTC](https://meta.discourse.org/t/unread-count-shows-unread-14-but-unread-is-empty/403986 "2026-05-28T10:00:42Z")
**Posts on this page:** 1
**Showing post:** 5

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [2026 年5 月 28 日 13:41 UTC](https://meta.discourse.org/t/unread-count-shows-unread-14-but-unread-is-empty/403986/5 "2026-05-28T13:41:44Z")

</div>

好的，这个 Rails 脚本将作为全局“全部标记为已读”功能，强制将所有用户的 `unread`（未读）计数重置为 `0`。因此，很遗憾，它不仅会清除那些虚假的未读标记，也会清除任何真实的未读计数。我们可以在 Rails 中通过 SQL 命令实现这一点。但请注意，这并不能修复根本的 bug。另外，如果你手边有最近的备份，这是个很好的主意；不过我已经在我的开发论坛测试过，它运行正常。

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

粘贴以下整个代码块并按回车键执行

```rb
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`（未读）状态。

---

_[View the full topic](https://meta.discourse.org/t/unread-count-shows-unread-14-but-unread-is-empty/403986)._
