2011-08-02 5 views
7

Estoy trabajando en Rails 2.3.11. Si tengo una url como http://www.abc.com/users/e.f.json, espero que la identificación sea 'e.f' y el formato esperado sea 'json'. ¿Puede alguien sugerir una forma de hacerlo? ¡Gracias!Tener un punto en la identificación de las rutas de los rieles

+1

No estoy familiarizado con la sintaxis de ruta en 2.3, pero puede intentar agregar una restricción al formato para no permitir períodos. Esto debería ayudar a mantener el formato solo en el último segmento separado por puntos, pero si deja el formato va a terminar con parte de su ID como formato. – coreyward

+0

posible duplicado de [Rieles - Parámetros con "punto" (por ejemplo, /google.com)](http://stackoverflow.com/questions/2952235/rails-params-with-dot-e-g-google-com) –

Respuesta

8

Debido a la convención de formato, Rails analizará todos los parámetros sin ningún punto. Usted puede tener route parameters with dots si quieres:

# You can change the regex to more restrictive patterns 
map.connect 'users/:id', :controller => 'users', :action => 'show', :id => /.*/ 

Pero ya que ambos '*' y '+' comodines de expresiones regulares son codiciosos, ignorará el: param completo (formato.).

Ahora, si es absolutamente necesario tener puntos en el nombre de usuario, no es un pseudo-solución que podría ayudarle a:

map.connect 'users/:id:format', :controller => 'users', :action => 'show', :requirements => { :format => /\.[^.]+/, :id => /.*/ } 
map.connect 'users/:id', :controller => 'users', :action => 'show' 

La desventaja es que usted tiene que incluir el punto en el Formato de expresiones regulares , de lo contrario, sería capturado por la expresión de nombre de usuario. Luego debe manejar el formato de puntos (por ejemplo, .json) en su controlador.

2

Aquí hay una solución similar a la de andersonvom, pero lo mantiene todo en una regla (y utiliza algunas abreviaturas de enrutamiento de Rails modernas).

map.connect 'users/:id(.:format)', to: 'users#show', id: /.*?/, format: /[^.]+/ 

(Nota del . frente a :format)

El truco es añadir un formato opcional, (.:format) y hacer la expresión regular ID no expansivo así se reconoce el formato. Mantenerlo en una regla es importante si desea darle un nombre a la ruta, para que pueda usarla para redirecciones, enlaces, etc. de una manera independiente del formato.

Cuestiones relacionadas