Moin
1
继续讨论 “感谢您的贡献”弹窗在帖子中即使超过限制后仍出现? 中的内容:
我对这一变更有个疑问。我觉得自己可能漏掉了什么,或者在测试时误解了其预期工作方式。
我的预期是:教育横幅应出现在前几篇帖子中,具体数量由站点设置 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 已被合并,说明测试并未失败。
能否有人帮我理解我到底忽略了什么?
5 个赞
哇,这真是一个小陷阱。我认为困惑确实源于设置名称(educate_until_posts)未更新,因为据我所知,在 PR#400074 中,似乎意图是仅显示一次该通知,之后无论计数如何都不再显示。
因此,该设置现在的含义不再是*“在前 N 条帖子中显示该消息”*,而是
“仅当用户的帖子数低于此阈值时才显示教育消息,且即使如此,也仅显示一次。”
@Roman 我理解得对吗?我们是否应该更新该设置的说明文字?
2 个赞
Roman
(Roman Rizzi)
3
此次变更的主要动机是防止教育提示反复出现。但看到这个话题后,我觉得可能做得有些过火了,因为如果提示只显示一次,该设置就有点形同虚设了。
我会再仔细斟酌,看看能否找到一个更好的平衡点。一旦找到,我会在此更新。
4 个赞
Roman
(Roman Rizzi)
5
昨天已合并此修复:
假设您未达到 educate_until_posts 阈值,教育提示仅在您开始输入时显示一次,除非您发布帖子或刷新页面,否则不会再次出现。
2 个赞