J'ai une page de liste, puis un formulaire, puis une page de remerciement. J'ai besoin de mettre un lien sur la page de remerciement qui ramène l'utilisateur à la page où il se trouvait avant le formulaire, qui varie toujours. J'ai essayé d'utiliser ceci:
= link_to "Back", :back
Mais cela ne fait que les ramener à la page précédente, donc le formulaire.
Eh bien, vous pouvez définir une méthode dans la page de formulaire pour collecter cette URL. L'idée de base est d'utiliser une variable de session personnalisée pour stocker l'URL précédente et la conserver pour la session suivante.
Supposons que l’action de votre formulaire soit SomeController # new, puis
class SomeController < ApplicationController
after_filter "save_my_previous_url", only: [:new]
def save_my_previous_url
# session[:previous_url] is a Rails built-in variable to save last url.
session[:my_previous_url] = URI(request.referer || '').path
end
end
Ensuite, dans la page de remerciement, vous pouvez obtenir ce my_previous_url
par
session[:my_previous_url]
Cela devrait pouvoir convenir à votre cas, l’URL précédente, il ya deux pages.
Disclaimer: Ceci n'est pas vérifié. Idée seulement.
La session appartient au contrôleur. Ce n'est pas une aide que vous pouvez utiliser directement en vue. Vous devez définir une variable d'instance dans le contrôleur, puis vous pouvez l'utiliser dans la vue. Comme ça
# Controller
@back_url = session[:my_previous_url]
# View
<%= link_to "Back", @back_url %>
Essaye ça
<%= link_to 'Back', url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com
Vous pouvez utiliser l'exemple de l'API Rails:
<%= link_to "Back", :back %>
L'utilisation d'un symbole: back au lieu d'un hachage d'options générera un lien vers le référant (un lien JavaScript de retour sera utilisé à la place d'un référent s'il n'en existe pas).
Puisque vous dites que la page peut être différente avant le formulaire, request_url peut probablement vous aider. Vous pouvez enregistrer votre request_url dans un paramètre et le rediriger s'il y en a un.
voici une source que vous pouvez prendre pour référence . http://programming-tut.blogspot.com/2010/06/Ruby-on-Rails-request-url.html
Si vous l'utilisez dans Controller, vous pouvez l'utiliser directement comme ceci:
def some_action
# some code
redirect_to :back
end
Cela fonctionne pour moi:
Dans le contrôleur de la vue précédente:
cookies[:original_referrer] = request.orignal_url
définir un cookie sur le navigateur avec l'URL de la page d'origine
Dans le contrôleur de la vue actuelle:
redirect_to cookies[:original_referrer]