大家好,
更新我们的 Discourse 实例后,我们在查看个人资料摘要时似乎遇到了错误的已解决帖子数量。示例:
- 错误:Profile - dr460nf1r3 - Garuda Linux Forum
- 正确(来自个人资料弹出窗口):

我注意到最近有几项更改,包括一个破坏性错误:
正确的数量显然仍然可用,所以可能是在迁移数据到新表时发生了什么问题?
大家好,
更新我们的 Discourse 实例后,我们在查看个人资料摘要时似乎遇到了错误的已解决帖子数量。示例:

我注意到最近有几项更改,包括一个破坏性错误:
正确的数量显然仍然可用,所以可能是在迁移数据到新表时发生了什么问题?
感谢您的来信。我会查看一下。
Discourse 中解决方案的计数存在一些差异,之前我们包含了已被删除的主题和帖子。
迁移之前,我们显示的是:
John 有 27 个解决方案,因为他的帖子被标记为解决方案 27 次。
这存储在 UserActions 表中。
迁移之后,我们现在计算的是:
John 有 20 个解决方案,因为有 20 个主题的帖子是解决方案。
这存储在 SolvedTopics 表中,并且直接链接到现有、未删除的主题。
这里有一个细微的差别——在第一种情况下,没有验证来检查解决方案帖子或其主题是否存在。
我会与我们的团队确认哪个数字更好显示。我个人倾向于计算仍然存在的主题的解决方案。
我相当确定这不可能是问题所在——因为它只会导致某些情况下的数字减少而不是增加,对吧?我还有另一个例子:
-> 错误:Profile - SGS - Garuda Linux Forum
-> 正确:

在我看来,这个计数机制不可能将已解决帖子的数量增加一倍以上。除此之外(当然未经证实),我非常怀疑在我之前的例子中已删除帖子的数量是否如此之高。
谢谢!
嗯,是的,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,再次感谢您的报告!
我还会更新在个人资料弹出窗口和用户摘要中使用的不同计数方法。
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.
太棒了,非常感谢! ![]()
此主题在 2 天后自动关闭。不再允许回复。