¿Por qué las rutas con un punto en un parámetro no coinciden?

Tengo una ruta para mis usuarios como /iGEL/contributions , que funciona bien. Pero ahora un usuario registrado con un nombre como ‘A.and.B.’, y ahora la ruta no coincide, ya que el nombre contiene puntos.

Mi ruta:

 get "/:user/contributions" => 'users#contributions' 

¿Algunas ideas?

Vea el cuadro de información azul aquí :

Por defecto, los segmentos dynamics no aceptan puntos: esto se debe a que el punto se usa como un separador para las rutas formateadas. Si necesita usar un punto dentro de un segmento dynamic, agregue una restricción que anule esto, por ejemplo :id => /[^\/]+/ permite cualquier cosa excepto una barra inclinada.

Eso sería, por ejemplo:

 get "/:user/contributions" => 'users#contributions', :constraints => { :user => /[^\/]+/ } 

Si su segmento variable es el último, entonces usar la expresión regular [^\/] también se comerá el formato. En tal caso, más bien use:

 /([^\/]+?)(?=\.json|\.html|$|\/)/