Ao tentar remover a estrela do meu distintivo “Bug Reporter” para usar outro distintivo como favorito, recebo um erro ‘FAILED’. Outros distintivos podem ser desmarcados (isso é uma palavra?), mas este não pode ser desmarcado.
Consigo desmarcar como favorito sem problemas.
Pode ser algo relacionado à sua conexão com a internet caindo no vídeo? Apenas um palpite.
Acabei de tentar com Wi-Fi estável. Ainda estou recebendo o erro.
Este bug existe há muito tempo. Pesquisei sobre ele no ano passado e aqui estão os passos para reproduzi-lo:
- Como administrador, defina
max favorite badgespara 2 e crie pelo menos um distintivo que possa ser ganho várias vezes. - Como usuário comum, defina dois distintivos como favoritos, sendo um deles o distintivo que pode ser ganho várias vezes (referido como Distintivo A).
- Como administrador, conceda novamente o Distintivo A ao usuário.
- Como usuário comum, atualize a página e tente desmarcar o Distintivo A como favorito. Você encontrará o erro.
A razão para o erro é que cada vez que um distintivo que pode ser ganho várias vezes é concedido, um novo registro user_badge é criado no banco de dados. No entanto, quando o usuário favoritou o distintivo e o recebe novamente, o novo registro user_badge não é automaticamente marcado como is_favorite. Quando o usuário tenta desmarcar o Distintivo A como favorito, o frontend envia o ID user_badge mais recente por padrão. Como esse registro não está marcado como is_favorite, o backend assume que o usuário está tentando definir um novo distintivo como favorito (em vez de desfavoritá-lo), o que excede o limite de max favorite badges, resultando no erro.
O código relevante está localizado em:
Uma possível solução é modificar a linha 131 para:
if UserBadge.where(badge: user_badge.badge, user: user_badge.user).pluck(:is_favorite).any? &&
No entanto, isso não aborda totalmente a inconsistência nos registros do banco de dados.
Como uma solução temporária, um usuário comum pode desfavoritar todos os distintivos executando o seguinte código JavaScript no 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());
Acabei de encontrar este erro, mas copiar e colar o código no console retorna um erro de sintaxe de:
SyntaxError: Unexpected identifier ‘require’. Expected ‘;’ after variable declaration.
SyntaxError: Unexpected identifier ‘identifier’
Talvez isto esteja um pouco desatualizado? Alguém tem uma versão atualizada?
Bem, eu desmarquei minha outra medalha (Empático), então pude desmarcar a medalha Repórter de Bugs.
Depois disso, se eu marcasse a medalha Empático, o que funcionou, marcar Aficionado retornou esse erro. Muito estranho.
EDIT: Após recarregar a página entre cada remarcação, removi a medalha (ironicamente) com bug Repórter de Bugs.
Olá, obrigado por contribuir! Revisei seu PR e ele precisa de algumas alterações.
Obrigado pela sua revisão, atualizei este PR
Incrível! Isso foi aprovado e mesclado.
A alteração deve estar no meta em breve.
Este tópico foi automaticamente fechado após 3 dias. Novas respostas não são mais permitidas.
