Как `educate_until_posts` взаимодействует с недавними изменениями в `check_education_message`?

Продолжение обсуждения из темы “Thanks for Contributing” Popup in Posts Appearing Even After Limit Passed?:

У меня возник вопрос по поводу этого изменения. Мне кажется, что я что-то упускаю или неправильно понимаю, как это должно работать при тестировании.

Я ожидал, что образовательный баннер будет появляться на первых нескольких постах, причём количество постов контролируется настройкой сайта 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 лайка

Основной мотивацией этого изменения было прекращение многократного отображения сообщения об образовании. Но теперь, увидев эту тему, я думаю, что, возможно, перестарался, поскольку это делает настройку бессмысленной, если сообщение показывается только один раз.

Я ещё раз всё обдумаю и попробую найти более подходящее решение. Как только сделаю это, обновлю информацию здесь.

4 лайка

Вчера было объединено это исправление:

Если вы находитесь ниже порога educate_until_posts, информационное сообщение будет показано только один раз при начале ввода и не появится снова, если вы не опубликуете сообщение или не обновите страницу.

2 лайка