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