标签列表中准确的主题数量

tags 页面上,主题数量不准确。事实上,它包含了用户不可见的主题。

以下是 meta 上的示例:

我在调用 API 时遇到了这个问题。在我的插件中,我需要精确的主题计数,因此被迫加载每个标签以统计可见主题。目前这似乎可行,但这浪费了带宽,我担心有一天会触达 Discourse 的 API 调用速率限制。

是否有机会解决这个问题?

谢谢。

2 个赞

这些都在私信中,你无法访问。

这显然不是修复或其他什么,但既然只在 4 个私信实例中出现,我认为我们不需要这个特定标签……所以我正在移除它。

1 个赞

如有需要,Meta 上的另一个例子是 sass 标签(标签列表中的主题数为 2,标签页中的主题数为 1)。

1 个赞

我在我们的论坛里也注意到了这个问题。重现该问题最简单的方法是:新建一个话题并添加标签,然后删除它,但它仍然被计入统计。

2 个赞

此问题带来的另一个小麻烦是,管理员在删除空标签时会收到错误的错误提示。

空标签:

错误的错误提示:

你能重现这个问题吗 @tshenry

1 个赞

好的,我重新回复一下,因为我觉得我已经完全搞明白这里的情况了 :slight_smile:

正如 @ninjapenguin 提到的,如果你有一个标签,并删除了所有应用了该标签的主题,该标签仍会保留在标签页面上,且计数不变。我认为这是因为这些主题在技术上仍然存在,并且它们仍然持有该标签。

@syl,如果你按照你的截图所示导航到 tete 标签的主题列表,然后在 URL 末尾添加

?status=deleted

你应该能看到两个带有 tete 标签的已删除主题。

你第二个截图中的信息消息对应的是应用了该标签的已删除主题的数量。


我觉得我们在统计或列出标签时,可能不应该将已删除的主题计算在内,但考虑到数据库中数据的存储方式,这可能不是一个非常简单的改动。你怎么看 @codinghorror

2 个赞

没错。

在标准论坛中,我认为已删除的主题解释了标签列表中显示的主题数量与用户实际能在每个标签中看到的主题数量之间的差异。修复这一点将是一个巨大的进步。但请注意,当非管理员用户查看包含私密主题的标签时,也会出现差异。

这一点我无法复现。如果我有一个标签用于私信或受限分类中的主题,那么没有权限访问这些主题的用户在标签列表中不会看到该标签。
目前我看到的唯一令人遗憾的行为,就是我之前提到的与已删除主题相关的问题。

1 个赞

抱歉造成混淆,我指的是标签计数。以下是复现该问题的步骤:

  1. 作为管理员,创建一个没有分类且带有新标签的主题
  2. 作为管理员,创建另一个带有相同标签但属于受限分类的主题
  3. 作为普通用户,进入 test-tag 标签页面,检查是否只能看到一个主题
  4. 但在标签列表中,该标签的计数显示为 2
1 个赞

好的,谢谢,我现在明白了。

我查看了代码,发现了一些情况。

  • tags 表中有两列会影响标签计数:topic_countpm_topic_count。这些计数会在 应用或移除标签时进行增减。非管理员用户只能看到 topic_count 的值。

  • 有一个 一致性任务 每 12 小时运行一次,它会 更新标签计数,确保这些计数 不包含 已删除的主题。

  • 目前没有机制能根据用户的个别主题访问权限实时调整计数。

根据我的观察,这里并没有 bug,只是当前实现存在限制。我认为这里讨论的所有内容都属于“功能请求”范畴,可以总结为:

使标签页面上的标签计数动态化,以便反映用户实际在导航到该标签的主题列表时会看到的内容。

1 个赞

非常感谢 @tshenry。这听起来很好,也许能解释为什么我在开发实例上遇到该问题的频率更高(可能那里没有运行一致性任务)。我会检查一下。

附:目前,Meta 上的 documentation 标签计数显示为 5,但我只能看到 4 个主题。12 小时后我会再检查一下 :slight_smile:

1 个赞