Gamificación de Discourse: error 404 / MissingAttributeError en la ruta /leaderboard

Así que, recientemente decidí habilitar la gamificación y me topé de inmediato con un problema: la ruta /leaderboard devolvía un error 404. El backend tenía más de 800 mil registros de puntuación calculados y los permisos eran correctos, pero la página en sí no cargaba.

Al revisar los registros del servidor, apareció lo siguiente:
ActiveModel::MissingAttributeError (falta el atributo 'admin' para User)

Mientras exploraba el código del plugin, noté que en lib/discourse_gamification/leaderboard_cached_view.rb la consulta de usuarios utiliza una cadena .select específica para extraer las columnas del tablero de clasificación:

.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, p.total_score, p.position",
)

Dado que users.admin y users.moderator no están incluidos en esa consulta, los objetos de usuario instanciados no tienen esos campos disponibles. Parece que (?) más adelante, durante la serialización o la renderización del diseño principal, se activa una verificación de personal en esos usuarios, lo que hace que Rails lance el MissingAttributeError y retroceda a un error 404.

Edité manualmente ese archivo para incluir users.admin y users.moderator en el bloque .select:

.select(
  "users.id, users.name, users.username, users.uploaded_avatar_id, users.admin, users.moderator, p.total_score, p.position",
)

Después de reiniciar el contenedor de la aplicación, el tablero de clasificación comenzó a cargar perfectamente.

Supongo que esto es un error (?) o ¿he sobreanalizado o pasado por alto algo completamente?

El sitio está actualmente en la versión v2026.6.0-latest (47a830330f).

2 Me gusta

El error y la explicación que proporcionaste coinciden. Lamentablemente, no pude reproducir el problema desde 47a830330f ni en main. Lo probé iniciando sesión como administrador y como usuario normal, y ambos cargan sin problemas.

Como verificación de sentido común, solo quiero confirmar que estás utilizando la versión de gamification que viene incluida en el núcleo de Discourse y que no tiene instalado el antiguo plugin independiente.

¿Podrías proporcionar más del seguimiento de pila de donde ocurre el MissingAttributeError?

1 me gusta

@ted,

De hecho, puedes ignorar esto sin problema. Al final, rastrear el problema hasta un plugin que se conectaba al UserScoreSerializer e implementaba su propia consulta .select() muy específica. No fue evidente al principio porque no se proporcionó un backtrace en /logs para el MissingAttributeError. Solo después de investigar y hacer la llamada manualmente a través de Rails para obtener un seguimiento completo de la pila pude identificar el plugin problemático.

Gracias, ¡y disculpa la falsa alarma!

2 Me gusta

¡No hay problema! Tuviste un problema y lo publicaste. Me alegra que lo hayas resuelto. :slightly_smiling_face: