private_messages_group でのルート大文字化エラー

プライベートグループの受信トレイについてはあまり詳しくなく、この現象を再現する方法も確信が持てませんが、以下のようなことが起こっています:

  • グループ(例:ExampleGroup)用にプライベートメッセージの受信トレイが設定されています。
  • そのグループのメンバーに「examplegroup の受信トレイにメッセージが 6 件あります」という通知が届きます。
  • その通知をクリックすると /topics/private-messages-group/username/examplegroup.json の読み込みが試行されます。
  • これによりエラーが発生します。

これは、examplegroup という名前のグループが存在しないことが原因だと考えています。実際のグループ名は ExampleGroup です。

ListController::generate_message_route は以下のような処理を行っています:

group = Group.find_by(name: params[:group_name])

これを以下のように変更すると問題が解消されるようです:

group = Group.find_by(name: params[:group_name])
group = Group.where('lower(name) = ?', params[:group_name].downcase).first unless group

ただし、これが根本的な問題ではないことは確かです。どこかで、パラメータが小文字に変換されてしまっているのだと思います(多分……)。

どこを確認すべきか、ご提案はありますか?

「いいね!」 3

コンソールで直接通知を作成する場合、リンクは大文字小文字を尊重します(データが偽物でも動作します)。

Notification.create!(
  user_id: 1,
  notification_type: Notification.types[:group_message_summary],
  data: { inbox_count: 5, group_name: "MyGroup", group_id: 41, username: 'angus' }.to_json
)

問題は作成側の、つまりポストアラーターにある可能性があります:discourse/app/services/post_alerter.rb at main · discourse/discourse · GitHub

ただし、この問題は再現できません。

「いいね!」 1

お助けいただきありがとうございます!しかし、そのリンクは正しくありません。

/u/username/messages/group/groupname ではなく、/topics/private-messages-group/username/groupname です。

後者がどこから来るのか、またどのように生成されるのかを見つけることができません。

「いいね!」 2

ここでは、URL パラメータに大文字のグループ名を必須としないことが正しい修正だと考えられます。以下のコミットで対応済みです:

/u/username/messages/group/groupname にアクセスすると、/topics/private-messages-group/username/groupname へ AJAX リクエストが送信されるため、@angus さんが上記でこの問題をデバッグした方法は正しいと思われます。

この問題を報告してくださった @RGJ さん、ありがとうございます :+1:

「いいね!」 5