2011-01-08 14 views
7

Tengo una aplicación de rieles que construí para un sitio antiguo que convertí de otro cms (en un idioma que no sea de rieles, jeje). La mayoría de las páginas antiguas se asignan a las páginas nuevas utilizando routes.rb. Pero todavía hay unos pocos 404.Rieles: ¿alguna forma elegante de manejar 404?

Soy un recién llegado de rieles, así que estoy preguntando si hay formas avanzadas de manejar 404. Por ejemplo, si estuviera programando en mi idioma anterior, haría esto:

  • Obtenga la URL (script_name) que se estaba accediendo y analícela.
  • Realice una búsqueda en la base de datos para buscar palabras clave, identificadores, etc. en la nueva URL.
  • Si lo encuentra, redirija a la página (o si encuentra varios registros, muéstrelos a todos en una página de resultados y deje que el usuario lo elija). Con los rieles que probablemente quiera hacer: estado =>: movido_permanentemente, ¿adivino?
  • Si no lo encuentra, mostrar un 404.

¿Hay gemas/plugins o tutoriales que conoces de que se ocuparía de tal cosa, si es aún posible. ¿O puedes explicar en un alto nivel cómo se puede hacer eso? No necesito una muestra de código completo, solo un empujón en la dirección correcta.

PS. Es una aplicación simple de rails 3 que usa un solo modelo de contenido.

+0

Acerca de su "P.S.", los modelos no tienen nada, realmente nada que ver con el enrutamiento. Los controladores se encargan de eso. :) –

Respuesta

7

poner esto en rutas (después de cada otra ruta que tiene, esto va a capturar cada url)

match '*url' => 'errors#routing' 

Y ahora en controlador de errores en el direccionamiento de la acción se puede implementar cualquier lógica de fantasía que desea, y render una vista como siempre (es posible que desee agregar :status => 404 a la llamada render). La URL solicitada estará disponible en el controlador como params[:url].

+0

Malvado, esto es justo lo que estaba buscando para dirigirme en la dirección correcta. ¡Muchas gracias! – jyoseph

0

hay una manera fea de hacer esto:

render :file => "#{RAILS_ROOT}/public/404.html", :layout => false, :status => 404 

Tal vez alguien puede llegar a una solución mejor.

Cuestiones relacionadas