`educate_until_posts` 如何与 `check_education_message` 的近期变更进行交互?

继续讨论 “感谢您的贡献”弹窗在帖子中即使超过限制后仍出现? 中的内容:

我对这一变更有个疑问。我觉得自己可能漏掉了什么,或者在测试时误解了其预期工作方式。

我的预期是:教育横幅应出现在前几篇帖子中,具体数量由站点设置 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 已被合并,说明测试并未失败。

能否有人帮我理解我到底忽略了什么?

1 个赞