Error 'FAILED' al intentar quitar la estrella a la insignia 'Bug Reporter'

Al intentar quitar la estrella de mi insignia de “Informador de errores” para usar otra insignia como mi favorita, recibo un error de ‘FALLO’. Otras insignias se pueden desmarcar como favoritas (¿es que esa palabra existe?), pero esta no se puede desmarcar.

3 Me gusta

Puedo quitarle la estrella sin problemas.


¿Podría ser algo relacionado con que tu conexión a Internet se caiga en el video? Solo una suposición.

1 me gusta

Lo acabo de probar con wifi estable. Sigo recibiendo el error.

2 Me gusta

Este error ha existido durante mucho tiempo. Lo investigué el año pasado y estos son los pasos para reproducirlo:

  1. Como administrador, establece max favorite badges en 2 y crea al menos una insignia que se pueda ganar varias veces.
  2. Como usuario normal, marca dos insignias como favoritas, una de las cuales es la insignia que se puede ganar varias veces (denominada Insignia A).
  3. Como administrador, otorga nuevamente la Insignia A al usuario.
  4. Como usuario normal, actualiza la página e intenta quitar la Insignia A de los favoritos. Te encontrarás con el error.

La razón del error es que cada vez que se otorga una insignia que se puede ganar varias veces, se crea un nuevo registro user_badge en la base de datos. Sin embargo, cuando el usuario ha marcado la insignia como favorita y luego la recibe nuevamente, el nuevo registro user_badge no se marca automáticamente como is_favorite. Cuando el usuario intenta quitar la Insignia A de los favoritos, el frontend envía por defecto el ID de user_badge más reciente. Dado que este registro no está marcado como is_favorite, el backend asume que el usuario está intentando marcar una nueva insignia como favorita (en lugar de quitarla de los favoritos), lo que excede el límite de max favorite badges, lo que resulta en el error.

El código relevante se encuentra en:

Una posible solución es modificar la línea 131 a:

if UserBadge.where(badge: user_badge.badge, user: user_badge.user).pluck(:is_favorite).any? &&

Sin embargo, esto no aborda completamente la inconsistencia en los registros de la base de datos.

Como solución temporal, un usuario normal puede quitar todas las insignias de los favoritos ejecutando el siguiente código JavaScript en la consola:

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());
9 Me gusta

Acabo de encontrar este error, pero al copiar y pegar el código en la consola, obtengo un error de sintaxis:

SyntaxError: Identificador inesperado ‘require’. Se esperaba ‘;’ después de la declaración de la variable.
SyntaxError: Identificador inesperado ‘identifier’

¿Quizás esto está un poco desactualizado? ¿Alguien tiene una versión actualizada?

También me gustaría añadir:

1 me gusta

Bueno, dejé de marcar con estrella mi otra insignia (Empathetic) y luego pude dejar de marcar con estrella la insignia Bug Reporter.

Después de eso, si volví a marcar con estrella la insignia Empathetic, lo cual funcionó, al marcar con estrella Aficionado apareció ese error. Muy extraño.

EDITAR: Después de recargar la página entre cada re-marcado con estrella, he eliminado la insignia Bug Reporter (irónicamente) defectuosa.

He creado una PR para solucionar este problema:

5 Me gusta

Hola, ¡gracias por contribuir! Revisé tu PR y necesita algunos cambios.

4 Me gusta

Gracias por tu revisión, he actualizado esta PR.

3 Me gusta

¡Genial! Esto ha sido aprobado y fusionado.

El cambio debería estar en meta en breve.

5 Me gusta

Este tema se cerró automáticamente después de 3 días. Ya no se permiten nuevas respuestas.