Salut. Je suis impressionné par le nombre de personne sur cette liste
qui ne savaient pas qu’on pouvait écrire
redirect_to :back
ce qui équivaut à
redirect_to request.env[“HTTP_REFERER”]
Je me permet donc de citer la doc officielle de rails en bas du message,
c’est disponible notamment sur railsbrain.
http://www.railsbrain.com/api/rails-2.0.2/doc/index.html?a=M000461&name=redirect_to
Plus généralement, utiliser un debugger comme celui de netbeans et
mettre un point d’arrêt permet d’explorer toutes les variables du moment
et de voir si il n’y en a pas une qui peut correspondre à notre besoin.
Effectivement, la solution
redirect_to :back
ne marche pas pour un back à 2 crans (par exemple si on a déjà redirigé
une fois). Donc si l’update est appelé depuis l’index, c’est bon, si
l’update est appelé depuis un formulaire d’edition lui même appelé
depuis l’index, c’est pas bon.
Au delà de deux cran il faut utiliser la session comme mémoire, et ça
facilite le travail s’il y a un plugin fourni pour ça, donc merci à
Frédéric Jay pour avoir citer le plugin history.
Sans le plugin, il faut faire un truc du style
session[:back]=request.path
au moment ou tu es dans le controlleur de ton index
puis
redirect to session[:back]
depuis ton update
Cependant, il faut savoir que ce genre de solution basé sur les session
peut engendrer des comportement bizarre si l’utilisateur fait beaucoup
joujou avec le bouton retour du navigateur. Cette remarque n’est pas
propre à rails, mais générale au web.
A près il y a la solution javascript grâce à rjs que tu as un peu
exploré. Je suis sur qu’on peut la faire marcher. Mais là c’est balo si
l’utilisateur a pas javascript. J’ai vu que tu pennais un peu et je ne
saurais pas te conseiller sur ce thème.
Je ne sais pas pourquoi j’avais laissé ma réponse initiale dans mes
brouillons sans l’envoyer, donc désolé d’arriver après la bataille, je
vous la met quand même en bas.
Donc bref, Hammes Hhh, si tu sens mieux le php, pourquoi pas?
Ca n’empêchera pas qu’il faudra bien fermer les “if” que tu ouvres, et
que ce sera plus facile si tu sais ou trouver la doc, si tu as un
environnement de dev qui te signale tes fautes bêtes de syntaxe et un
environnement de debuggage qui te permette d’explorer ton programme
pendant son exécution.
Hammes Hhh a écrit :
end
il manque effectivement un “end” pour fermer le “if”, et il me semble
qu’il faut écrire:
redirect_to :back
au lieu de
redirect_to :action => “back”
DOC DE RAILS
redirect_to(options = {}, response_status = {})
Redirects the browser to the target specified in options. This parameter
can take one of three forms:
* Hash - The URL will be generated by calling url_for with the
options.
* Record - The URL will be generated by calling url_for with the
options, which will reference a named URL for that record.
* String starting with protocol:// (like http://) - Is passed
straight through as the target for redirection.
* String not containing a protocol - The current protocol and host
is prepended to the string.
* :back - Back to the page that issued the request. Useful for
forms that are triggered from multiple places. Short-hand for
redirect_to(request.env[“HTTP_REFERER”])
Examples:
redirect_to :action => “show”, :id => 5
redirect_to post
redirect_to “http://www.rubyonrails.org”
redirect_to “/images/screenshot.jpg”
redirect_to articles_url
redirect_to :back
The redirection happens as a “302 Moved” header unless otherwise
specified.
Examples:
redirect_to post_url(@post), :status=>:found
redirect_to :action=>‘atom’, :status=>:moved_permanently
redirect_to post_url(@post), :status=>301
redirect_to :action=>‘atom’, :status=>302
When using redirect_to :back, if there is no referrer, RedirectBackError
will be raised. You may specify some fallback behavior for this case by
rescuing RedirectBackError.