2011-09-18 15 views
34

Actualmente tengo una ventana emergente de inicio de sesión en mi barra de encabezado, que está en todas las páginas de mi sitio web. Quiero poder volver a cargar la página actual en la que está la persona después de un inicio de sesión exitoso. ¿Cómo hago esto en el controlador?¿Cómo puedo volver a cargar la página actual en Ruby on Rails?

def create 
    #declaring and defining user variable stuff 
    if user.save 
    #reload current page <--how do I do this? 
    end 
end 

Gracias

+0

Esta es una respuesta que puede ser útil http://stackoverflow.com/a/8619748/1770571 –

Respuesta

45

para mi aplicación, que utilizan redirect_to :back y se hace el truco. Sin embargo, dudo que esto pueda tener un error en un caso de uso no general (el usuario proviene de una página especial?) Pero no lo he encontrado hasta ahora en mi aplicación.

+2

Esto funciona para mí. No estás recargando la página actual, tanto como vas a crear una acción y luego de vuelta ... Si usas AJAX, entonces simplemente actualizarías la parte donde muestras que un amigo ha iniciado sesión ... y mantenerlo en esa página. – pjammer

+0

Documentación para redirect_to: http://api.rubyonrails.org/classes/ActionController/Redirecting.html – Nate

+12

Para Rails 5, 'redirect_to: back' ha quedado obsoleto para ser eliminado en 5.1, y en su lugar' redirect_back (ubicación_de_seguridad: ubicación_de_detrás) 'debe ser utilizado. – DuckNG

32

Si está buscando una manera de actualizar la página (normalmente redirect_to :back) con una solicitud XHR, no tiene que buscar la forma de cambiar el tipo de respuesta, simplemente dígale a la página que vuelva a cargar con JS en línea

format.js {render inline: "location.reload();" }

Como Elena menciones, esto debería ir en un bloque respond_to, así:

respond_to do |format| 
    format.js {render inline: "location.reload();" } 
end 
10

Archonic 's respuesta anterior trabajó para mí. Sin embargo, en los carriles 3, tenía que colocar esto en un bloque respond_to a fin de evitar una 'ArgumentError (muy pocos argumentos)' error:

respond_to do |format| 
    format.js {render inline: "location.reload();" } 
end 
8

En los carriles 5 redirect_to :backis improved por:

redirect_back(fallback_location: root_path) 
1

Desde Rails 5 (o versiones anteriores), tiene un método request.referrer. Simplemente redirige del controlador al referente y abre la página de la que procede la solicitud.

redirect_to request.referrer, notice: "You're being redirected"

Cuestiones relacionadas