'Bug Reporter'バッジのスター解除時に「'FAILED'」エラー

バグレポーターバッジのスターを削除して別のバッジをお気に入りにしようとすると、「FAILED」というエラーが表示されます。他のバッジはスターを解除できますが(そんな言葉があるのか?)、このバッジはスターを解除できません。

「いいね!」 3

問題なくスターを解除できます。


動画でインターネット接続が切断されていることと関係があるのでしょうか?ただの当てずっぽですが。

「いいね!」 1

安定したWi-Fiでも試しましたが、まだエラーが発生しています。

「いいね!」 2

このバグは長期間存在しています。昨年調査した際の再現手順は以下の通りです。\n\n1. 管理者として、「最大お気に入りバッジ数」を2に設定し、複数回獲得可能なバッジを少なくとも1つ作成します。\n2. 一般ユーザーとして、2つのバッジをお気に入りとして設定します。そのうちの1つは複数回獲得可能なバッジ(以下、バッジA)です。\n3. 管理者として、ユーザーにバッジAを再度付与します。\n4. 一般ユーザーとして、ページをリロードし、バッジAのスター解除を試みます。ここでエラーが発生します。\n\nエラーの原因は、複数回獲得可能なバッジが付与されるたびに、データベースに新しいuser_badgeレコードが作成されることです。しかし、ユーザーがバッジをお気に入り登録している状態で再度付与された場合、新しいuser_badgeレコードは自動的にis_favoriteとしてマークされません。ユーザーがバッジAのスター解除を試みると、フロントエンドはデフォルトで最新のuser_badge IDを送信します。このレコードはis_favoriteとしてマークされていないため、バックエンドはユーザーが新しいバッジをお気に入り登録しようとしている(スター解除ではなく)とみなし、max favorite badgesの上限を超えていると判断してエラーが発生します。\n\n関連するコードは以下の場所にあります。\ndiscourse/app/controllers/user_badges_controller.rb at d3f09f8f61ac33f107fe1503fb4fd928877cfcd4 · discourse/discourse · GitHub UserBadge.where(badge: user_badge.badge, user: user_badge.user).pluck(:is_favorite).any? &&\n\n\nしかし、これではデータベースレコードの一貫性の問題は完全には解決しません。\n\n一時的な回避策として、一般ユーザーはコンソールで以下のJavaScriptコードを実行することで、すべてのお気に入りバッジのスターを解除できます。\n\njavascript\nconst user_name = require("discourse/models/user").default.current().username;\nconst badges = await require("discourse/models/user-badge").default.findByUsername(user_name);\nconst favorites = new Map();\nbadges.filter((b)=>\u003eb.is_favorite).forEach((b)=\u003efavorites.set(b.badge_id,b));\nfavorites.forEach((b)=\u003eb.favorite());\n```

「いいね!」 9

このエラーに遭遇しました。コンソールにコードをコピー&ペーストしたところ、次のような構文エラーが発生しました。

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

これは少し古いのでしょうか?更新されたバージョンをお持ちの方はいらっしゃいますか?

さらに、以下を追加したいと思います。

「いいね!」 1

他のバッジ(Empathetic)のスターを解除してから、Bug Reporterバッジのスターを解除できました。

その後、Empatheticバッジにスターを付けたところ(これはうまくいきました)、Aficionadoにスターを付けようとすると、あのエラーが返ってきました。非常に奇妙です。

編集:各再スターの間にページをリロードした後、皮肉なことにバグのあるBug Reporterバッジを削除しました。

この問題を修正するためのプルリクエストを作成しました。

「いいね!」 5

こんにちは、ご協力ありがとうございます!PRを確認したところ、いくつか変更が必要な点がありました。

「いいね!」 4

レビューありがとうございます。このPRを更新しました。

「いいね!」 3

素晴らしい!承認され、マージされました。

変更はまもなくmetaに反映されるはずです。

「いいね!」 5

このトピックは3日後に自動的に閉じられました。新しい返信はもう許可されていません。