继续讨论 “感谢您的贡献”弹窗在帖子中即使超过限制后仍出现? 中的内容:
我对这一变更有个疑问。我觉得自己可能漏掉了什么,或者在测试时误解了其预期工作方式。
我的预期是:教育横幅应出现在前几篇帖子中,具体数量由站点设置 educate_until_posts 控制。默认情况下,该值为 2。
为了测试,我将该值临时改为 5 以格外保险。然而,我的测试用户只看到了一次教育提示。
我还查看了相关代码:
据我理解,该方法首先会排除私信,以及已有记录表明教育提示已展示过的用户。这部分我理解。
接着,它会判断用户正在创建新主题还是回复,并计算用户的帖子/主题总数。
接下来这部分让我感到困惑:如果总帖子数低于配置的限值,系统会创建一条记录以防止教育提示再次显示——然后才展示该提示。
我到底漏掉了什么?
例如,如果 educate_until_posts 保持默认值 2,我预期该提示应在用户的前两篇帖子中显示。
用户开始创建其第一篇帖子。这不是私信,且尚无 UserHistory 记录,因此提示被展示——这很合理。
但为何随后立即创建了 UserHistory 记录?这难道不会导致该提示永远无法再次显示吗?
我原本预期代码逻辑更类似如下:
count = @user.topic_count + @user.post_count
if count >= SiteSetting.educate_until_posts
UserHistory.create!(
action: UserHistory.actions[:notified_about_composer_education],
target_user_id: @user.id,
)
elsif count < SiteSetting.educate_until_posts
return (
但如果这确实是个问题,我猜想与该设置相关的测试应该会失败。既然该 PR 已被合并,说明测试并未失败。
能否有人帮我理解我到底忽略了什么?
