2011-12-30 10 views
17

Tengo una aplicación de rieles (Rails 3.0) que necesito retirar temporalmente del servicio. Mientras esto esté en efecto, quiero crear una nueva ruta que dirija todas las solicitudes a una sola pieza de contenido estático. Tengo un controlador configurado para servir mis páginas estáticas.¿Cómo puedo crear una ruta de Rails 3 que coincida con todas las solicitudes y dirija a un recurso/página?

que hemos probado algo como esto:

match '*' => 'content#holding' 

y

match '*/*' => 'content#holding' 

para que coincida con una ruta comodín como se describe aquí: Rails 3 route globbing sin éxito.

Esta es probablemente una respuesta muy simple, pero no pude resolverlo.

/EDITAR / olvidó mencionar que tuve esta regla en la parte superior de mi archivo routes.rb.

+0

¿Hiciste esta ruta en la parte superior de tu archivo de rutas? – Robin

Respuesta

39

Carriles tiene que obligar a los parámetros de URL a una variable, intente esto:

match '*foo' => 'content#holding' 

Si también desea hacer coincidir /, utilice paréntesis para especificar que foo es opcional:

match '(*foo)' => 'content#holding' 
+0

Esto parece funcionar para todas las rutas, pero no para la raíz en sí. Agregué una ruta raíz temporal adicional a la parte superior de routes.rb también, así que ahora está funcionando como quiero, ¡gracias! – Nick

+1

Mi resultado final es el siguiente: "match '* foo' => redirect ('/') #NEWLINE root: to => 'content # holding'" Básicamente tomé su idea, agregué el redireccionamiento, luego enruté la raíz temporalmente para mi página de espera – Nick

+1

ver mis ediciones para obtener también root – klochner

0

me encontré con algo como esto donde tenía los nombres de dominio como parámetro en mi ruta:

match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails' 

La pieza clave de este fue el /.*/ que era un comodín para casi cualquier cosa. Así que tal vez podría hacer algo como:

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want' 
1

de que lo hice ayer y por primera vez con la solución que klochner espectáculos. Lo que no me gustó de esto es el hecho de que cualquier cosa que ingrese en la URL, se queda allí después de que se cargue la página, y como quería capturar todas las rutas que redireccionan a mi root_url, eso no era muy atractivo.

Lo que me ocurrió con el siguiente aspecto:

# in routes.rb 
get '*ignore_me' => 'site#unknown_url' 

# in SiteController 
def unknown_url 
    redirect_to root_url 
end 

Recuerde pegar la entrada de rutas en la parte inferior del archivo!

EDITAR: Como señaló Nick, también puede hacer la redirección directamente en el archivo de rutas.

+0

Sí, también lo noté. También puede hacer redirecciones directamente en las rutas. Rb - vea mi comentario anterior en la respuesta de klochner – Nick

+0

@Nick Ah, eso sí que es ingenioso. Cambiará a esa solución. – cvshepherd

Cuestiones relacionadas