Discourse Gamification - /leaderboard ルートで 404 / MissingAttributeError が発生

そこで、最近ゲーミフィケーションを有効にしようとしたところ、/leaderboard ルートで404エラーが発生する問題に直面しました。バックエンドには80万件以上のスコア記録が計算済みで、権限も問題ないはずでしたが、ページ自体が読み込まれませんでした。

サーバーログを確認すると、以下のエラーが表示されていました:
ActiveModel::MissingAttributeError (User の 'admin' 属性が見つかりません)

プラグインコードを掘り下げてみると、lib/discourse_gamification/leaderboard_cached_view.rb において、リーダーボード用にカラムを取得するユーザークエリが特定の .select 文字列を使用していることがわかりました:

.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, p.total_score, p.position",
)

users.admin および users.moderator がこのクエリに含まれていないため、インスタンス化されたユーザーオブジェクトにはこれらのフィールドが存在しません。どうやら、その後のシリアライズ処理やコアレイアウトのレンダリング段階で、これらのユーザーに対してスタッフチェックがトリガーされ、Rails が MissingAttributeError をスローして404にフォールバックしているようです。

私は手動でそのファイルを編集し、.select ブロックに users.adminusers.moderator を追加しました:

.select(
  "users.id, users.name, users.username, users.uploaded_avatar_id, users.admin, users.moderator, p.total_score, p.position",
)

アプリコンテナを再起動したところ、リーダーボードが正常に読み込まれるようになりました。

これはバグでしょうか?それとも私が何かを見落として、あるいは過剰に考えているのでしょうか?

現在のサイトバージョンは v2026.6.0-latest (47a830330f) です。

「いいね!」 2

ご提示いただいたエラーと説明は一致しています。残念ながら、47a830330f または main からはこの問題を再現できませんでした。管理者アカウントと一般ユーザーアカウントの両方で試しましたが、どちらも正常に読み込まれます。

念のため確認ですが、Discourse コアにバンドルされている gamification のバージョンを使用しており、古いスタンドアロンのプラグインはインストールされていないでしょうか?

MissingAttributeError が発生している箇所のスタックトレースを、もう少し詳しく提供していただくことは可能でしょうか?

「いいね!」 1

@ted さん、

実は、この件は気にしなくて大丈夫です。最終的に、この問題は UserScoreSerializer にフックし、独自の狭い .select() 文を実装していたプラグインに起因していることが判明しました。当初は /logsMissingAttributeError のバックトレースが表示されていなかったため、問題が明確ではありませんでした。Rails を通じて手動で呼び出し、完全なスタックトレースを取得して初めて、問題のあるプラグインを特定することができました。

お礼と、誤ったアラートを起こして申し訳ありませんでした!

「いいね!」 2

大丈夫ですよ!不具合があったので報告してくれたんですよね。解決してよかったです。:slightly_smiling_face: