J'ai actuellement une fenêtre de connexion dans ma barre d'en-tête qui se trouve sur chaque page de mon site Web. Je veux pouvoir recharger la page actuelle sur laquelle la personne se trouve après une connexion réussie. Comment faire cela dans le contrôleur?
def create
#declaring and defining user variable stuff
if user.save
#reload current page <--how do I do this?
end
end
Merci
Pour mon application, j'utilise redirect_to :back
et ça fait l'affaire. Cependant, je doute que cela puisse avoir une erreur dans un ou des cas d'utilisation non généraux (l'utilisateur est venu d'une page spéciale?) Mais je ne l'ai pas trouvé jusqu'à présent dans mon application.
Si vous cherchez un moyen d'actualiser la page (généralement redirect_to :back
) Avec une demande XHR, vous n'avez pas besoin de chercher un moyen de changer le type de réponse - dites simplement à la page de recharger avec JS en ligne.
format.js {render inline: "location.reload();" }
Comme Elena mentionne, cela devrait aller dans un bloc respond_to, comme ceci:
respond_to do |format|
format.js {render inline: "location.reload();" }
end
Dans Rails 5 redirect_to :back
est amélioré par:
redirect_back(fallback_location: root_path)
Archonic la réponse ci-dessus a fonctionné pour moi. Cependant, dans Rails 3, j'ai dû le placer dans un respond_to
bloquer afin d'éviter une erreur "ArgumentError (trop peu d'arguments)":
respond_to do |format|
format.js {render inline: "location.reload();" }
end
Depuis Rails 5 (ou peut-être des versions plus anciennes), vous avez un request.referrer
méthode. Vous redirigez simplement du contrôleur vers le référent et cela ouvre la page d'où provient la demande.
redirect_to request.referrer, notice: "You're being redirected"
Rails 5 a introduit une fonction alternative:
redirect_back(fallback_location: root_path)
Il redirige chaque fois que HTTP_REFERER est connu. Sinon, il redirige vers le fallback_location.
Le redirect_to :back
est déconseillé dans Rails 5.0 https://github.com/Rails/rails/pull/22506 et supprimé depuis Rails = 5,1