Всем привет,
После обновления нашего экземпляра Discourse, похоже, в сводках профилей отображаются неверные данные о количестве решённых тем. Пример:
Я уже заметил, что недавно было внесено несколько изменений, включая критическую ошибку:
nat:
Мы только что перенесли плагин discourse-solved с использования пользовательских полей на использование корректных таблиц. При этом были сделаны некоторые предположения, например, что каждое сообщение может быть ответом только на одну тему, или что тема с ответом должна указывать на сообщение, отличное от null. Все эти предположения были отвергнуты
Поскольку правильные значения всё ещё доступны, скорее всего, проблема возникла при миграции данных в новые таблицы?
1 лайк
nat
(Natalie T)
27.Март.2025 11:35:04
2
Спасибо за обращение. Я посмотрю.
1 лайк
nat
(Natalie T)
27.Март.2025 11:55:55
4
В Discourse обнаружены расхождения в подсчёте решений: ранее учитывались темы и сообщения, которые уже были удалены.
До миграции мы указывали:
У Джона 27 решений, так как его сообщение отметили как решение 27 раз.
Эта информация хранилась в таблице UserActions.
После миграции мы теперь подсчитываем:
У Джона 20 решений, так как есть 20 тем, где его сообщения являются решениями.
Эта информация хранится в таблице SolvedTopics и имеет прямую ссылку на существующую, не удалённую тему.
Здесь есть тонкое различие: в первом случае не проводилась проверка на существование сообщения-решения или его темы.
Я уточню у нашей команды, какое число лучше отображать. Лично я склоняюсь к подсчёту решений только для тем, которые всё ещё существуют.
3 лайка
Я вполне уверен, что это не может быть причиной проблемы — ведь в некоторых случаях это привело бы к меньшему, а не к большему количеству, верно? У меня есть ещё один пример для вас:
→ Неверно: Profile - SGS - Garuda Linux Forum
→ Верно:
Мне кажется невозможным, чтобы этот механизм подсчёта более чем удваивал количество решённых тем. Кроме того (хотя это и не подтверждено), я сильно сомневаюсь, что количество удалённых сообщений в моём предыдущем примере было столь высоким.
Спасибо!
nat
(Natalie T)
27.Март.2025 12:20:03
7
Хм, да, 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 лайка
nat
(Natalie T)
27.Март.2025 12:41:58
8
Отдельное спасибо @ondrej за то, что также напомнил мне о Solution badge not working? . Похоже, некоторые расхождения возникали ещё до этой миграции. Хорошая новость в том, что мы перейдём к более последовательной нумерации в Discourse и наших плагинах.
4 лайка
Прекрасно, большое спасибо!
4 лайка
nat
(Natalie T)
28.Март.2025 01:50:17
13
4 лайка
nat
(Natalie T)
Закрыл(а) тему
31.Март.2025 00:00:16
14
Эта тема была автоматически закрыта через 2 дня. Новые ответы больше не принимаются.