`educate_until_posts`は、`check_education_message`の最近の変更とどのように相互作用しますか?

“投稿” での「貢献ありがとう」ポップアップが制限を超えても表示される? の議論を続けます。

この変更について質問があります。テストしている際、何か見落としているか、仕組みを誤解しているような気がします。

私の予想では、教育用バナーは最初の数件の投稿に表示されるはずです。その件数は educate_until_posts サイト設定で制御されます。デフォルトではこの値は 2 です。

テストのため、念のためこの値を 5 に変更しました。しかし、テストユーザーが教育メッセージを見たのは 1 回だけでした。

また、コードも確認しました:

私の理解では、このメソッドはまず、個人メッセージと、すでに教育メッセージが表示されたことを示す記録を持つユーザーを除外します。この部分は理解できます。

次に、ユーザーがトピックを作成しているのか返信をしているのかを判断し、ユーザーの投稿数・トピック数の合計を計算します。

次の部分が私を混乱させています。合計投稿数が設定された制限より低い場合、教育メッセージの再表示を防ぐ記録を作成し、その後メッセージを表示します。

何が欠けているのでしょうか?

例えば、educate_until_posts をデフォルト値の 2 のままにしておくと、ユーザーの最初の 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