Tengo una página que enumera todos los proyectos que tienen encabezados y paginación ordenables.
path:
/projects?order=asc&page=3&sort=code
Elijo editar uno de los proyectos
path:
projects/436/edit
Cuando hago clic en guardar en esa página, llama al controlador de proyectos / método de actualización. Después de actualizar el código, quiero redirigir a la ruta en la que estaba antes de hacer clic en editar un proyecto específico. En otras palabras, quiero estar en la misma página con la misma clasificación.
Vi link_to (: back) y pensé que: back podría funcionar en redirect_to (: back), pero eso no es posible.
puts YAML::dump(:back)
yields the following:
:back
Alguna idea sobre cómo podría hacer que esto funcione. Parece un problema que se resolvería fácilmente, pero soy nuevo en RoR.
fuente

redirect_to session.delete(:return_to)en la acción de actualización. Esto limpia el valor de la sesión, ya que ya no es necesario.redirect_to request.referer?request.referer.referer, si eso fuera posible. @Jaime Bellmyer ¿Por qué||=?¿Por qué
redirect_to(:back)no funciona para ti, por qué es un no ir?redirect_to(:back)Funciona como un encanto para mí. Es solo un atajo pararedirect_to(request.env['HTTP_REFERER'])http://apidock.com/rails/ActionController/Base/redirect_to (pre Rails 3) o http://apidock.com/rails/ActionController/Redirecting/redirect_to (Rails 3)
Tenga en cuenta que
redirect_to(:back)está en desuso en Rails 5. Puede usarredirect_back(fallback_location: 'something')en su lugar (consulte http://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html )fuente
redirect_to :backtampoco funciona bien para mí, digamos que visita/posts/new, esto se establece como el referente para la próxima solicitud, por lo que después de que el formulario se envíe con éxito, muestra el formulario nuevamente, es decir/posts/new. Sin embargo, funciona bien para otros fines.redirect_to projects_path.HTTP_REFERERno está configurado, es posibleActionController::RedirectBackErrorque tenga que rescatarlo de esta excepción en ese caso. Según tengo entendido, el usoredirect_backno requiere ningún manejo de excepciones, ya que está obligado a proporcionarfallback_location. Tal vez "no funciona bien" no es la forma correcta de decirlo.Me gusta el método de Jaime con una excepción, funcionó mejor para mí volver a almacenar el árbitro cada vez:
La razón es que si edita varios objetos, siempre será redirigido a la primera URL que almacenó en la sesión con el método de Jaime. Por ejemplo, digamos que tengo objetos Apple y Orange. Edito Apple y me pongo
session[:return_to]al árbitro de esa acción. Cuando vaya a editar Naranjas con el mismo código,session[:return_to]no se configurará porque ya está definido. Entonces, cuando actualice el Orange, me enviarán al árbitro de la acción de edición Apple # anterior.fuente
Así es como lo hacemos en nuestra aplicación
De esta manera, solo almacena la última solicitud GET en el
:return_toparámetro de sesión, por lo que todos los formularios, incluso cuando la POSTed en varias ocasiones funcionaría:return_to.fuente
request.request_uriya no está disponible, así que sugiero usarrequest.fullpathen su lugarandyoren lasifdeclaraciones. Uso&&y en su||lugar. Detalles aquí .En los rieles 5, según las instrucciones de las Guías de rieles, puede usar:
La ubicación 'atrás' se extrae del encabezado HTTP_REFERER que no se garantiza que el navegador establezca. Es por eso que debe proporcionar una 'ubicación de retorno'.
fuente
noticeobjeto con laredirect_backdeclaración para decirle al usuario que algo salió mal con un mensaje flash?redirect_back(fallback_location: root_path, notice: "Something went wrong!"). Espero que pueda ayudar de alguna manera.request.refererRack lo establece y se establece de la siguiente manera:Simplemente haga un
redirect_to request.referery siempre redirigirá a la página de referencia verdadera, o al root_path ('/'). Esto es esencial cuando se pasan pruebas que fallan en casos de navegación directa a una página en particular en la cual el controlador lanza un redirect_to: backfuente
refererse definió a partir del 28 de marzo de 2011 , y así es como se define a partir de hoy . Es decir,|| '/'no es parte de la definición.Para aquellos que estén interesados, aquí está mi implementación que amplía la respuesta original de MBO (escrita contra rails 4.2.4, ruby 2.1.5).
fuente