Desde la aparición de Rails 5, hay un método que nos ha ayudado mucho con nuestras redirecciones en los controladores. Se trata del método redirect_back, cuyo propósito es, tan solo, redireccionar a la página en la que estábamos tras una acción determinada, un create, un update, etc…
En Rails 4 y versiones anteriores, esta redirección se hacía mediante el archiconocido redirect_to :back. Y la verdad es que estaba muy bien, pero tiene un pequeño problema. Vamos a ver en detalle su funcionamiento
redirect_to :back
lo que hace es redirigirnos a HTTP_REFERER
pero que ocurre cuando no está presente, ahí es donde viene el problema, nos lanza una excepción y no queremos que lo haga al redirigir a una vista porque está muy feo.
En este caso, hasta Rails 4 teníamos que evitar nuestra excepción con algo así:
class UsersController < ApplicationController rescue_from ActionController::RedirectBackError, with: :redirect_to_default def update user.update(user_params) redirect_to :back end private def redirect_to_default redirect_to root_path end end
Y como somos desarrolladores premium, no nos gusta tener que escribir este tochaco de código solo para redirigir si falla el redirect_to. Cada línea de código extra es una posibilidad más de equivocarnos así que…
Aquí es donde redirect_back viene en nuestra ayuda, vamos a desglosar también exactamente como funciona:
redirect_back(fallback_location: root_path)
Como véis, simplemente le hemos añadido un fallback_location, que será donde nos redirigirá si no tenemos disponible HTTP_REFERER
. Vamos a ver cómo quedaría el código anterior usando redirect_back
class UsersController < ApplicationController def update user.update(user_params) redirect_back(fallback_location: root_path) end end
Mirad que preciosidad, mucho más compacto, limpio y corto ¿Es para enamorarse de Rails o no? Si queréis ver la documentación oficial de Rails del método aquí os dejo el enlace en api.rubyonrails.org
Deja una respuesta