Usando Rails v2.1, digamos que tiene una acción para un controlador al que se puede acceder desde más de una ubicación. Por ejemplo, dentro de la aplicación Rails, tiene un enlace para editar un usuario desde dos vistas diferentes, una en la vista de índice de los usuarios y otra desde otra vista (digamos desde la barra de navegación en cada página).¿La mejor manera de redireccionar condicional?
Me pregunto cuál es la mejor manera de redirigir al usuario al lugar correcto dependiendo del enlace en el que hicieron clic. Por ejemplo:
Ejemplo 1:
- Lista de todos los usuarios
- Haga clic en "Editar" en un usuario en la lista
- usuario hace clic en "Guardar" en la forma, el controlador vuelve a dirigir de nuevo a 1 .
Ejemplo 2:
- EL CO usuario ld estar en cualquier página dentro de la aplicación, la barra de navegación muestra un enlace para editar el usuario actual
- El usuario hace clic en el enlace para editar
- El usuario hace clic en "guardar" en el formulario, el controlador redirige a la página estaban encendidos cuando el usuario hizo clic en el enlace "editar" en la barra de navegación.
que he visto hacer en el pasado por:
- La colocación de un parámetro en el enlace Editar original con el original controlador/acción en la que apareció el enlace. Para hacer esto más SECO, podría usar @ controller.controller_name y @ controller.action_name en un helper.
- El controlador guarda los parámetros en una variable de sesión.
- Una vez que el controlador ha guardado el registro, lo redirige a la variable de sesión.
Lo que no me gusta particularmente acerca de esta solución es la necesidad de agregar el parámetro a cada enlace aplicable en las vistas. Me pregunto si hay una manera de construir todo esto en el controlador.
Una mejor manera de que estaba pensando era:
- Coloque un before_filter en la acción "editar" para salvar la de referencia (es esto lo suficientemente fiable?) En la sesión.
- Cuando se golpea "update", el controlador redirigirá a la variable de sesión y luego elimina la variable de sesión.
¿Alguna idea sobre la mejor manera de hacerlo?
Buenas ideas, me ayudaste a pensar en un problema diferente que estaba viendo. ¡Gracias! –
Te entiendo, pero la variable de sesión aún puede ser necesaria ya que necesita persistir en los errores de validación de formulario. ¿Cómo responde tu respuesta a esto? El before_filter proporciona una mejor DRY-ness ya que este comportamiento debería estar en una serie de acciones en el controlador. –
Si necesita conservar algo guardado en el flash para otra solicitud (por ejemplo, para pasar el paso de corrección de error), puede optar por persistir explícitamente ('flash [: foo] = flash [: foo]') o, si le causa menos dolor en general, use la sesión y explíquelo explícitamente cuando termine. –