Ошибка капитализации маршрута в 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 отправляет AJAX-запрос на /topics/private-messages-group/username/groupname, поэтому действия @angus по отладке этой проблемы выглядят верными.

Спасибо за сообщение об этой проблеме, @RGJ :+1:

5 лайков