2010-02-17 22 views
5

¿Hay una manera más sencilla de escribir esto:rieles, enrutamiento muchas rutas con nombre a una acción

map.old_site_cusom_packages '/customs_packages_options.html', :controller => :public, :action => :redirect_to_home 
    map.old_corporate '/corporate.html', :controller => :public, :action => :redirect_to_home 
    map.old_track '/track.html', :controller => :public, :action => :redirect_to_home 
    map.old_links '/links.html', :controller => :public, :action => :redirect_to_home 
    map.old_contact '/contact.html', :controller => :public, :action => :redirect_to_home 

Quiero enviar muchas rutas con nombre a una acción en un controlador, yo estoy asegurando de url sobra desde un antiguo sitio redirigir a las páginas correctas.

Saludos.

Respuesta

2

Siempre se puede escribir una ruta de usos múltiples con una expresión regular para capturar los detalles:

old_content_names_regexp = Regexp.new(%w[ 
    customs_packages_options 
    corporate 
    track 
    links 
    contact 
].join('|')) 

map.old_content '/:page_name.html', 
    :controller => :public, 
    :action => :redirect_to_home, 
    :requirements => { 
    :page_name => old_content_names_regexp 
    } 

Eso debería capturar páginas específicas y reorientar en consecuencia . Una solución más robusta es tener algún tipo de tabla de búsqueda en una base de datos que se verifique antes de publicar contenido o páginas de tipo 404.

Editar: Para rutas con nombre, es una alteración fácil:

%w[ 
    customs_packages_options 
    corporate 
    track 
    links 
    contact 
].each do |old_path| 
    map.send(:"old_#{old_path}", 
    "/#{old_path}.html", 
    :controller => :public, 
    :action => :redirect_to_home, 
) 
end 

En la mayoría de los casos las viejas rutas se pueden reescribir usando la ruta legado singular en primer lugar. También es mejor mantener la tabla de enrutamiento lo más ajustada posible. El segundo método es más una muleta para tratar de unir las rutas antiguas.

+0

perfecto ... y para que sea aún más sucinto que no es necesario para crear el objeto de expresiones regulares que sólo puede hacer ... old_content_names_regexp =/customs_packages_options | Inicio | pista/ – Smickie

+1

Si bien ordenada, esto no lo hace en realidad hacer lo que se pide. Proporciona una ruta con nombre que se parametriza con un 'page_name'. La pregunta se refiere a muchas rutas con nombre. –

+0

No proporciona la misma funcionalidad de rutas con nombre, pero eso es fácil de agregar. – tadman

7

Utilice la with_options método:

map.with_options :controller => :public, :action => :redirect_to_home do |p| 
    p.old_site_custom_packages '/customs_packages_options.html' 
    p.old_corporate '/corporate.html' 
    p.old_track '/track.html' 
    p.old_links '/links.html' 
    p.old_contact '/contact.html' 
end 
Cuestiones relacionadas