总结中的已解决计数显示不正确的值

大家好,

更新我们的 Discourse 实例后,我们在查看个人资料摘要时似乎遇到了错误的已解决帖子数量。示例:

我注意到最近有几项更改,包括一个破坏性错误:

正确的数量显然仍然可用,所以可能是在迁移数据到新表时发生了什么问题?

1 个赞

感谢您的来信。我会查看一下。

1 个赞

Discourse 中解决方案的计数存在一些差异,之前我们包含了已被删除的主题和帖子。

迁移之前,我们显示的是:

John 有 27 个解决方案,因为他的帖子被标记为解决方案 27 次。

这存储在 UserActions 表中。

迁移之后,我们现在计算的是:

John 有 20 个解决方案,因为有 20 个主题的帖子是解决方案。

这存储在 SolvedTopics 表中,并且直接链接到现有、未删除的主题。

这里有一个细微的差别——在第一种情况下,没有验证来检查解决方案帖子或其主题是否存在。

我会与我们的团队确认哪个数字更好显示。我个人倾向于计算仍然存在的主题的解决方案。

3 个赞

我相当确定这不可能是问题所在——因为它只会导致某些情况下的数字减少而不是增加,对吧?我还有另一个例子:
-> 错误:Profile - SGS - Garuda Linux Forum
-> 正确:
图片显示了一个用户个人资料部分,其中显示用户于 2020 年 4 月 15 日加入,已阅读 600 小时内容,并于 4 小时前发帖,当前连续打卡 5 天。(由 AI 标注)

在我看来,这个计数机制不可能将已解决帖子的数量增加一倍以上。除此之外(当然未经证实),我非常怀疑在我之前的例子中已删除帖子的数量是否如此之高。

谢谢!

嗯,是的,485 和 90 的差距太大了。

我认为我找到了 bug(尽管我上面提到的关于差异的说法仍然是真的)——

之前的实现中,John 的摘要中的解决方案数量是通过任何人将 John 的帖子标记为解决方案的次数来计算的。

  def solved_count
    UserAction.where(user: @user).where(action_type: UserAction::SOLVED).count
  end

新的实现中,John 的用户摘要中的解决方案数量是 John 将帖子标记为解决方案的次数。

  def solved_count
    DiscourseSolved::SolvedTopic.where(accepter: @user).count
  end

这解释了巨大的差异。“解决方案计数”的定义从“您回答的次数”更改为“您接受的次数”。

我会修复这个 bug,再次感谢您的报告!

我还会更新在个人资料弹出窗口和用户摘要中使用的不同计数方法。

4 个赞

Props to @ondrej for also mentioning Solution badge not working? to me. It looks like some discrepancies were already happening before this migration. Good thing is that we’ll be migrating to a more consistent number across Discourse and our plugins.

4 个赞

太棒了,非常感谢! :slight_smile:

4 个赞

此项现已修复并标准化 - FIX: Standardise the definition of what a solution is by nattsw · Pull Request #352 · discourse/discourse-solved · GitHub

4 个赞

此主题在 2 天后自动关闭。不再允许回复。