Quindi, ho recentemente deciso di abilitare la gamification e mi sono subito imbattuto in un problema: la rotta /leaderboard restituiva un errore 404. Il backend aveva oltre 800.000 record di punteggi calcolati e i permessi erano corretti, ma la pagina stessa non si caricava.
La verifica dei log del server ha mostrato:
ActiveModel::MissingAttributeError (attributo mancante 'admin' per User)
Mentre esaminavo il codice del plugin, ho notato in lib/discourse_gamification/leaderboard_cached_view.rb che la query sull’utente utilizza una stringa .select specifica per estrarre le colonne per la classifica:
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, p.total_score, p.position",
)
Poiché users.admin e users.moderator non sono inclusi in quella query, gli oggetti utente istanziati non dispongono di quei campi. Sembra che (?) più avanti nel processo, durante la serializzazione o il rendering del layout principale, venga attivato un controllo per lo staff su quegli utenti, facendo sì che Rails generi l’errore MissingAttributeError e ricada su un 404.
Ho modificato manualmente quel file per includere users.admin e users.moderator nel blocco .select:
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, users.admin, users.moderator, p.total_score, p.position",
)
Dopo aver riavviato il contenitore dell’applicazione, la classifica ha iniziato a caricarsi perfettamente.
Immagino che si tratti di un bug (?) o ho esagerato/trascurato qualcosa del tutto?