Quando tento rimuovere la stella dal mio badge “Bug Reporter” per usare un altro badge come preferito, ricevo un errore “FALLITO”. Altri badge possono essere deselezionati (è una parola?), ma questo non può essere deselezionato.
Sono in grado di rimuoverlo dalle preferite senza problemi.
Potrebbe essere qualcosa legato alla tua connessione Internet che cade nel video? Solo un’ipotesi azzardata
L’ho appena provato con Wi-Fi stabile. Ricevo ancora l’errore.
Questo bug è presente da molto tempo. L’ho ricercato l’anno scorso e questi sono i passaggi per riprodurlo:
- Come amministratore, imposta
max favorite badgessu 2 e crea almeno un badge che può essere guadagnato più volte. - Come utente normale, imposta due badge come preferiti, uno dei quali è il badge che può essere guadagnato più volte (indicato come Badge A).
- Come amministratore, assegna nuovamente il Badge A all’utente.
- Come utente normale, aggiorna la pagina e prova a rimuovere il Badge A dai preferiti. Incontrerai un errore.
La causa dell’errore è che ogni volta che viene assegnato un badge che può essere guadagnato più volte, viene creato un nuovo record user_badge nel database. Tuttavia, quando l’utente ha aggiunto il badge ai preferiti e poi lo riceve di nuovo, il nuovo record user_badge non viene automaticamente contrassegnato come is_favorite. Quando l’utente tenta di rimuovere il Badge A dai preferiti, il frontend invia l’ID user_badge più recente per impostazione predefinita. Poiché questo record non è contrassegnato come is_favorite, il backend presume che l’utente stia tentando di impostare un nuovo badge come preferito (invece di rimuoverlo dai preferiti), superando il limite di max favorite badges, causando l’errore.
Il codice pertinente si trova qui:
Una possibile soluzione è modificare la riga 131 in:
if UserBadge.where(badge: user_badge.badge, user: user_badge.user).pluck(:is_favorite).any? &&
Tuttavia, questo non risolve completamente l’incoerenza nei record del database.
Come soluzione temporanea, un utente normale può rimuovere tutti i badge dai preferiti eseguendo il seguente codice JavaScript nella console:
const user_name = require("discourse/models/user").default.current().username;
const badges = await require("discourse/models/user-badge").default.findByUsername(user_name);
const favorites = new Map();
badges.filter((b)=>b.is_favorite).forEach((b)=>favorites.set(b.badge_id,b));
favorites.forEach((b)=>b.favorite());
Ho appena riscontrato questo errore, ma copiando e incollando il codice nella console restituisce un errore di sintassi:
SyntaxError: Unexpected identifier ‘require’. Expected ‘;’ after variable declaration.
SyntaxError: Unexpected identifier ‘identifier’
Forse questo è un po’ obsoleto? Qualcuno ha una versione aggiornata?
Bene, ho rimosso la stella dal mio altro badge (Empatico), quindi ho potuto rimuovere la stella dal badge Segnalatore di bug.
Successivamente, se avessi aggiunto la stella al badge Empatico, cosa che ha funzionato, l’aggiunta della stella ad Aficionado ha restituito quell’errore. Molto strano.
MODIFICA: Dopo aver ricaricato la pagina tra ogni riaggiunta della stella, ho rimosso il badge Segnalatore di bug (ironicamente) difettoso.
Ciao, grazie per il tuo contributo! Ho esaminato la tua PR e necessita di alcune modifiche.
Grazie per la tua recensione, ho aggiornato questa PR
Fantastico! Questa modifica è stata approvata e unita.
La modifica dovrebbe essere presto disponibile su meta.
Questo argomento è stato chiuso automaticamente dopo 3 giorni. Non sono più ammessi nuovi messaggi.
