Error de capitalización de ruta en private_messages_group

No estoy muy familiarizado con las bandejas de entrada privadas de grupos y no estoy seguro de cómo reproducir esto, pero ocurre lo siguiente:

  • Se ha configurado una bandeja de entrada de mensajes privados para un grupo, llamémoslo ExampleGroup.
  • Un miembro de ese grupo recibe una notificación: ‘hay 6 mensajes en tu bandeja de entrada de examplegroup’.
  • Al hacer clic en esa notificación, intenta cargar /topics/private-messages-group/username/examplegroup.json.
  • Esto produce un error.

Creo que esto ocurre porque no existe un grupo llamado examplegroup. El grupo se llama ExampleGroup.

ListController::generate_message_route hace lo siguiente:

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

Cambiar esto a:

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

parece resolver el problema. Pero estoy seguro de que ese no es el problema real. En algún lugar el parámetro se convierte a minúsculas cuando no debería (creo…).

¿Alguien tiene alguna sugerencia sobre dónde buscar?

3 Me gusta

Si creas las notificaciones directamente en la consola, el enlace respeta las mayúsculas (esto funciona incluso si los datos son falsos)

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
)

El problema podría estar en el lado de la creación, es decir, en el generador de alertas de publicaciones: discourse/app/services/post_alerter.rb at main · discourse/discourse · GitHub

Sin embargo, no logro reproducir este caso.

1 me gusta

¡Gracias por tu ayuda! Pero ese no es el enlace correcto.

No es /u/username/messages/group/groupname,
sino /topics/private-messages-group/username/groupname.

No logro encontrar de dónde sale este último ni cómo generarlo.

2 Me gusta

Creo que la solución correcta aquí es no requerir que el nombre del grupo en los parámetros de la URL tenga mayúsculas. Se ha realizado mediante:

Ten en cuenta que al navegar a /u/username/messages/group/groupname se dispara una solicitud AJAX a /topics/private-messages-group/username/groupname, por lo que lo que @angus hizo arriba para depurar este problema parece correcto.

Gracias por reportar este problema @RGJ :+1:

5 Me gusta