Necesito saber la ruta actual en un filtro en Rails. ¿Cómo puedo saber de qué se trata?
Estoy haciendo recursos REST y no veo rutas con nombre.
ruby-on-rails
ruby
routing
luca
fuente
fuente
Respuestas:
Para descubrir el URI:
Para averiguar la ruta, es decir, controlador, acción y parámetros:
fuente
params[:controller]
yparams[:action]
. Sin embargo, fuera de él, si desea reconocer la ruta, esta API ya no está disponible. Ahora ha cambiadoActionDispatch::Routing
y todavía no lo he probadorecognize_path
.request.path
para encontrar la ruta actual.request.env['ORIGINAL_FULLPATH']
para incluir los posibles parámetros en la ruta, vea mi respuesta a continuación.Si está intentando poner algo especial en una vista, puede usarlo
current_page?
como en:... o una acción e id ...
... o una ruta con nombre ...
...y
Debido a que
current_page?
requiere un controlador y una acción, cuando me preocupo solo por el controlador, hago uncurrent_controller?
método en ApplicationController:Y úsalo así:
... que también funciona con múltiples nombres de controlador ...
fuente
controller_name
yaction_name
son buenos para usar en ayudantes y vistas para este tipo de cosas también.La solución más simple que puedo encontrar en 2015 (verificado con Rails 4, pero también debería funcionar con Rails 3)
fuente
<form action="<%= request.path %>">
Puedes hacerlo
A mí me funciona en rails 3.1.0.rc4
fuente
En rails 3 puede acceder al objeto Rack :: Mount :: RouteSet a través del objeto Rails.application.routes, luego llame a reconocer en él directamente
que obtiene la primera (mejor) coincidencia, la siguiente forma de bloque recorre las rutas coincidentes:
una vez que tenga la ruta, puede obtener el nombre de la ruta a través de route.name. Si necesita obtener el nombre de la ruta para una URL en particular, no la ruta de solicitud actual, deberá simular un objeto de solicitud falso para pasar al bastidor, consulte ActionController :: Routing :: Routes.recognize_path para ver cómo lo están haciendo.
fuente
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
Basado en la sugerencia de @AmNaN (más detalles):
Ahora puede llamarlo, por ejemplo, en un diseño de navegación para marcar elementos de la lista como activos:
Para las rutas
users
yalerts
,current_page?
sería suficiente:Pero con rutas anidadas y solicitud de todas las acciones de un controlador (comparable con
items
),current_controller?
fue el mejor método para mí:La primera entrada del menú está activa de esa manera para las siguientes rutas:
fuente
O, más elegantemente:
request.path_info
Fuente:
Solicitud de documentación en rack
fuente
Asumiré que te refieres al URI:
Según su comentario a continuación, si necesita el nombre del controlador, simplemente puede hacer esto:
fuente
self.
enself.controller_name
eself.controller_class_name
Si también necesita los parámetros :
Y recuerde que siempre puede llamar
<%= debug request.env %>
desde una vista para ver todas las opciones disponibles.fuente
request.url
request.path # para obtener la ruta excepto la url base
fuente
Puede ver todas las rutas a través de rake: rutas (esto podría ayudarlo).
fuente
Puede hacer
request.env['REQUEST_URI']
para ver el URI completo solicitado ... generará algo como lo siguientefuente
Puedes hacerlo:
Ahora, puedes usar así:
fuente