web-dev-qa-db-fra.com

Lien vers la page visitée avant le formulaire

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.

25
user1738017

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.

Ajouter

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 %>
18
Billy Chan

Essaye ça

<%= link_to 'Back', url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com

voici plus de détails.

53
panicoper

Vous pouvez utiliser l'exemple de l'API Rails:

<%= link_to "Back", :back %>

API Rails Doc pour link_to

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).

4
ilgam

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

1
Nich

Si vous l'utilisez dans Controller, vous pouvez l'utiliser directement comme ceci:

def some_action
  # some code
  redirect_to :back
end
0
zw963

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]
0
Sheldon Hage