Estoy tratando de escribir una ruta general en Rails 3, pero quiero reservar algunos términos en ella. Estoy específicamente siguiendo el ejemplo planteado en este post, en la respuesta de David Burrows: Dynamic routes with Rails 3Rails 3: hacer una ruta fácil para leer y modificar
La sintaxis que estoy usando es el siguiente:
match '*path' => 'router#routing', :constraints => lambda{|req| (req.env["REQUEST_PATH"] =~ /(users|my-stuff)/).nil? }
Ahora, que la sintaxis funciona bien - si un usuario visita una página con "usuario" o "mi-cosas" en la ruta, cae por la ventana y se dirige a un lugar específico. Si el usuario va a cualquier otra URL, va a mi lógica de enrutamiento.
Mi pregunta es más acerca de la legibilidad: ¿hay alguna forma de que pueda hacer coincidir la ruta con algo otro que una expresión regular? ¿Hay alguna manera de proporcionar una variedad de términos para hacer coincidir? Además, ¿hay alguna manera de unir segmentos específicos de la ruta, a diferencia de todo?
Obviamente Rails tiene un enrutamiento integrado, pero este proyecto requiere que, para ciertas rutas, el controlador no esté presente en la URL. Por lo tanto, el catch-all.
Gracias por cualquier ayuda
Aquí está el archivo de rutas actualizados por la respuesta a continuación:
class RouteConstraint
RESERVED_ROUTES = ['users', 'my-stuff']
def matches?(request)
!RESERVED_ROUTES.map {|r| request.path.include?(r)}.empty?
end
end
App::Application.routes.draw do
resources :categories
resources :sites
match '*path' => 'router#routing', :constraints => RouteConstraint.new
devise_for :users, :path_names =>{ :sign_in => 'login', :sign_out => 'logout', :registration => 'register' }
root :to => "router#routing"
end
Esto se acerca, pero ahora, en lugar de eludir las "rutas ocultas" enumeradas, la lógica intenta alimentarlas al controlador de enrutamiento. Si elimino el bang o el .empty? llamar en el método de coincidencias, la lógica funciona para palabras reservadas, pero no para todo lo demás. Lo siento, mi comprensión de lambdas es bastante limitada. –
Ah, he entendido mal tu pregunta, mi lógica era exactamente la contraria a la tuya. ¿Podría publicar un poco más de sus archivos de rutas para ver cómo encaja todo eso? –
Bien, he agregado las rutas actuales a mi pregunta anterior. –