Итак, я недавно решил включить геймификацию и сразу столкнулся с проблемой: маршрут /leaderboard возвращал ошибку 404. На бэкенде было более 800 тысяч записей о баллах, права доступа проверены, но сама страница не загружалась.
Проверка логов сервера показала:
ActiveModel::MissingAttributeError (отсутствует атрибут 'admin' для User)
Изучая код плагина, я заметил в файле lib/discourse_gamification/leaderboard_cached_view.rb, что запрос к пользователям использует конкретную строку .select для извлечения столбцов для таблицы лидеров:
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, p.total_score, p.position",
)
Поскольку users.admin и users.moderator не включены в этот запрос, созданные объекты пользователей не имеют доступа к этим полям. Похоже, что где-то дальше по цепочке во время сериализации или рендеринга основного макета выполняется проверка на принадлежность к персоналу для этих пользователей, из-за чего Rails выбрасывает MissingAttributeError и возвращает ошибку 404.
Я вручную отредактировал этот файл, добавив users.admin и users.moderator в блок .select:
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, users.admin, users.moderator, p.total_score, p.position",
)
После перезапуска контейнера приложения таблица лидеров начала загружаться без проблем.
Я предполагаю, что это ошибка (?), или я что-то полностью переоценил/упустил?
Сайт сейчас работает на версии v2026.6.0-latest (47a830330f).