そこで、最近ゲーミフィケーションを有効にしようとしたところ、/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.admin と users.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) です。