2012-08-09 20 views
5

Bueno, me he estado golpeando la cabeza contra una pared de ladrillo con esta, ¡cualquier ayuda muy apreciada!Enrutamiento de raíles - redirección con bloque AND código de estado

estoy redirigir las direcciones URL de edad y en su mayor parte que es fácil y funciona bien, por ejemplo .:

match '/pages/holiday-specials/', :to => redirect("/accommodation", :status => 301) 

Sin embargo, necesito un cajón de sastre especial regla que tiene que hacer algunas comprobaciones de expresiones regulares. Esto funciona bien, EXCEPTO que no puedo hacer que pase el estado. Esto redirige y no lo necesito, pero no envía el estado 301:

match '/*:path', :to => redirect(lambda { |params| "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" }, :status => 301) 

¿Alguna idea?

+0

En una nota lateral, creo '301' es el código de estado por defecto al redirigir una ruta, por lo que no debería necesitar configurarla manualmente. Estábamos buscando un '302' y nos encontramos con el mismo problema. – lime

Respuesta

5

mover el bloque fuera del paréntesis del método, de la siguiente manera:

match '/*:path', :to => redirect(:status => 301) { |params| "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" } 

o dividirlo en varias líneas:

match '/*:path', :to => redirect(:status => 301) do |params| 
    "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" 
end 
Cuestiones relacionadas