Счётчик решённых в сводке отображает неверные значения

Всем привет,

После обновления нашего экземпляра Discourse, похоже, в сводках профилей отображаются неверные данные о количестве решённых тем. Пример:

Я уже заметил, что недавно было внесено несколько изменений, включая критическую ошибку:

Поскольку правильные значения всё ещё доступны, скорее всего, проблема возникла при миграции данных в новые таблицы?

1 лайк

Спасибо за обращение. Я посмотрю.

1 лайк

В Discourse обнаружены расхождения в подсчёте решений: ранее учитывались темы и сообщения, которые уже были удалены.

До миграции мы указывали:

У Джона 27 решений, так как его сообщение отметили как решение 27 раз.

Эта информация хранилась в таблице UserActions.

После миграции мы теперь подсчитываем:

У Джона 20 решений, так как есть 20 тем, где его сообщения являются решениями.

Эта информация хранится в таблице SolvedTopics и имеет прямую ссылку на существующую, не удалённую тему.

Здесь есть тонкое различие: в первом случае не проводилась проверка на существование сообщения-решения или его темы.

Я уточню у нашей команды, какое число лучше отображать. Лично я склоняюсь к подсчёту решений только для тем, которые всё ещё существуют.

3 лайка

Я вполне уверен, что это не может быть причиной проблемы — ведь в некоторых случаях это привело бы к меньшему, а не к большему количеству, верно? У меня есть ещё один пример для вас:
→ Неверно: Profile - SGS - Garuda Linux Forum
→ Верно:
На изображении показан раздел профиля пользователя, где указано, что пользователь присоединился 15 апреля 2020 года, прочитал контент в течение 600 часов, опубликовал сообщение 4 часа назад, а текущая серия составляет 5 дней подряд. (Подпись сгенерирована ИИ)

Мне кажется невозможным, чтобы этот механизм подсчёта более чем удваивал количество решённых тем. Кроме того (хотя это и не подтверждено), я сильно сомневаюсь, что количество удалённых сообщений в моём предыдущем примере было столь высоким.

Спасибо!

Хм, да, 485 и 90 слишком сильно различаются.

Кажется, я нашёл ошибку (хотя упомянутое выше замечание о расхождении всё ещё верно) —

В предыдущей реализации количество решений в сводке Джона подсчитывалось как число раз, когда кто-либо пометил пост Джона как решение:

  def solved_count
    UserAction.where(user: @user).where(action_type: UserAction::SOLVED).count
  end

В новой реализации количество решений в сводке пользователя Джона — это число раз, когда Джон пометил пост как решение:

  def solved_count
    DiscourseSolved::SolvedTopic.where(accepter: @user).count
  end

Это объясняет большую разницу. «Количество решений» изменило определение с «сколько раз вы ответили» на «сколько раз вы приняли решение».

Исправлю ошибку, ещё раз спасибо за сообщение!

Также обновлю разные методы подсчёта, используемые во всплывающем окне профиля и в сводке пользователя.

4 лайка

Отдельное спасибо @ondrej за то, что также напомнил мне о Solution badge not working?. Похоже, некоторые расхождения возникали ещё до этой миграции. Хорошая новость в том, что мы перейдём к более последовательной нумерации в Discourse и наших плагинах.

4 лайка

Прекрасно, большое спасибо! :slight_smile:

4 лайка

Это теперь исправлено и стандартизировано — FIX: Standardise the definition of what a solution is by nattsw · Pull Request #352 · discourse/discourse-solved · GitHub

4 лайка

Эта тема была автоматически закрыта через 2 дня. Новые ответы больше не принимаются.