'Bug Reporter' 배지를 별표 해제하려고 하면 'FAILED' 오류 발생

버그 리포터 배지의 별을 제거하여 다른 배지를 내 최애로 설정하려고 하면 ‘FAILED’ 오류가 발생합니다. 다른 배지들은 별을 제거할 수 있지만(이게 실제로 단어인지 모르겠지만), 이 배지만은 별을 제거할 수 없습니다.

3개의 좋아요

별표를 해제하는 것은 잘 됩니다.


영상에서 인터넷 연결이 끊겼기 때문일까요? 그냥 추측일 뿐입니다.

1개의 좋아요

안정적인 와이파이 환경에서 다시 시도해 봤는데도 여전히 오류가 나요.

2개의 좋아요

이 버그는 오랫동안 존재해 왔습니다. 저는 작년에 이 문제를 조사했으며, 재현 방법은 다음과 같습니다:

  1. 관리자 계정으로 max favorite badges(최대 즐겨찾기 배지 수)를 2로 설정하고, 여러 번 획득할 수 있는 배지를 최소 하나 이상 생성합니다.
  2. 일반 사용자 계정으로 두 개의 배지를 즐겨찾기로 설정합니다. 이때 그중 하나는 여러 번 획득할 수 있는 배지여야 합니다(이하 배지 A라고 칭함).
  3. 관리자 계정으로 해당 사용자에게 배지 A를 다시 부여합니다.
  4. 일반 사용자 계정으로 페이지를 새로고침한 뒤 배지 A의 즐겨찾기를 해제(언스타)하려고 합니다. 그러면 오류가 발생합니다.

오류의 원인은 여러 번 획득할 수 있는 배지가 부여될 때마다 데이터베이스에 새로운 user_badge 레코드가 생성되기 때문입니다. 그러나 사용자가 해당 배지를 즐겨찾기로 설정한 후 다시 배지를 획득하게 되면, 새로 생성된 user_badge 레코드는 자동으로 is_favorite로 표시되지 않습니다. 사용자가 배지 A의 즐겨찾기를 해제하려고 하면 프론트엔드는 기본적으로 가장 최근의 user_badge ID를 전송합니다. 이 레코드가 is_favorite로 표시되지 않았기 때문에, 백엔드는 사용자가 즐겨찾기를 해제하려는 것이 아니라 새로운 배지를 즐겨찾기로 설정하려는 것으로 간주합니다. 이로 인해 max favorite badges 한도를 초과하여 오류가 발생합니다.

관련 코드는 다음 위치에 있습니다:

가능한 해결책 중 하나는 131번째 줄을 다음과 같이 수정하는 것입니다:

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

그러나 이 방법은 데이터베이스 레코드 간의 불일치 문제를 완전히 해결하지는 못합니다.

임시 해결책으로, 일반 사용자는 콘솔에서 다음 JavaScript 코드를 실행하여 모든 배지의 즐겨찾기를 해제할 수 있습니다:

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개의 좋아요

방금 이 오류를 마주했는데, 코드를 콘솔에 복사해서 붙여넣으면 다음과 같은 구문 오류가 발생합니다:

SyntaxError: Unexpected identifier ‘require’. Expected ‘;’ after variable declaration.
SyntaxError: Unexpected identifier ‘identifier’

아마도 이 코드가 좀 오래되었을까요? 업데이트된 버전이 있는 분이 계신가요?

다음 내용도 추가하고 싶습니다:

1개의 좋아요

음, 다른 배지(공감)를 언스타르(취소)한 후에야 버그 리포터 배지를 언스타르할 수 있었습니다.

그 후, 공감 배지를 다시 스타(선택)했는데 이는 정상적으로 작동했지만, 애호가를 스타하려 하니 그 오류가 다시 발생했습니다. 정말 이상하네요.

수정: 각 재스타 사이에 페이지를 새로고침한 결과, (아이러니하게도) 버그가 있는 버그 리포터 배지를 제거할 수 있었습니다.

이 문제를 수정하기 위해 PR을 생성했습니다:

5개의 좋아요

안녕하세요, 기여해 주셔서 감사합니다! PR을 검토해 봤는데, 일부 수정이 필요합니다.

4개의 좋아요

리뷰해 주셔서 감사합니다. 이 PR을 업데이트했습니다.

3개의 좋아요

훌륭합니다! 승인 및 병합이 완료되었습니다.

변경 사항은 곧 메타에 반영될 예정입니다.

5개의 좋아요

이 주제는 3일 후 자동으로 닫혔습니다. 더 이상 새로운 답글을 작성할 수 없습니다.