Bonjour, J'ai un problème qui me gonfle depuis longtemps. Je visite la page users/edit qui me renvoit un formulaire pour gérer son compte utilisateur ainsi que ses 'friends'. Le formulaire friends va donc soumettre les données à friendships/update, qui va redirect_to la page users/edit d'où la requête est venue. Jusque là tout va bien. Le truc chiant, c'est qu'une fois revenu sur la page edit, si je rafraîchis la page, FF me propose de renvoyer le formulaire! Qu'est-ce qui se passe? Comment éviter ce comportement? Pourquoi FF mémorise-t'il les données post alors qu'il y a eu une redirection??? Dois-je à tout prix rediriger sur une autre page que celle dont les données proviennent? Si quelqu'un peut m'expliquer le pourquoi du comment ça m'aiderait bien.
on 2009-06-18 14:19
on 2009-06-18 14:30
C'est un comportement normal. Quand tu recharges la page, tu demandes au navigateur de renvoyer la dernière requête. Or celle-ci est visiblement un PUT, donc renvoit les paramètres avec. Le redirect_to n'intervient pas dans ce comportement car il se passe au niveau serveur sans repasser par le client. C'est classique dans les applis web, et c vrai que ça peut paraître embêtant (quoi que pas tant que ça puisque c'est le comportement normal) d'un point de vue ergonomique. Si vraiment ça t'embête, pourquoi ne pas faire ton update de friendships en Ajax? -- thomas Fernando Perez a écrit :
on 2009-06-18 15:04
> C'est un comportement normal. Quand tu recharges la page, tu demandes au > navigateur de renvoyer la dernière requête. Donc en fait recharger la page ça veut en fait dire "reposer la question au serveur" et non pas "recharger la dernière réponse du serveur" Oo > Si vraiment ça t'embête, pourquoi ne pas faire ton update de friendships > en Ajax? Si c'est la seule solution, je devrais m'y faire.
on 2009-06-18 15:15
Thomas a écrit : > C'est un comportement normal. Quand tu recharges la page, tu demandes au > navigateur de renvoyer la dernière requête. Or celle-ci est visiblement > un PUT, donc renvoit les paramètres avec. Le redirect_to n'intervient > pas dans ce comportement car il se passe au niveau serveur sans repasser > par le client. Non ce n'est pas normal. Au rechargement tu demandes bien la dernière reqûete qui est un GET puisque tu viens d'être redirigé. -- Martin Catty || fuse http://www.noremember.org
on 2009-06-18 15:17
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Ah oui c vrai avec la redirection c'est un GET.<br>
<br>
Martin Catty a écrit :
<blockquote cite="mid:4A3A3DAB.4000703@noremember.org" type="cite">
<pre wrap="">Thomas a écrit :
</pre>
<blockquote type="cite">
<pre wrap="">C'est un comportement normal. Quand tu recharges la
page, tu demandes au
navigateur de renvoyer la dernière requête. Or celle-ci est visiblement
un PUT, donc renvoit les paramètres avec. Le redirect_to n'intervient
pas dans ce comportement car il se passe au niveau serveur sans repasser
par le client.
</pre>
</blockquote>
<pre wrap=""><!---->
Non ce n'est pas normal. Au rechargement tu demandes bien la dernière
reqûete qui est un GET puisque tu viens d'être redirigé.
</pre>
</blockquote>
<br>
<br>
--~--~---------~--~----~------------~-------~--~----~<br>
Vous avez reçu ce message, car vous êtes abonné au groupe
"Railsfrance" de Google Groups.
<br> Pour transmettre des messages à ce groupe, envoyez un e-mail Ã
l'adresse railsfrance@googlegroups.com
<br> Pour résilier votre abonnement envoyez un e-mail à l'adresse
railsfrance-unsubscribe@googlegroups.com<br>
-~----------~----~----~----~------~----~------~--~---<br>
</body>
</html>
<br>
on 2009-06-18 15:46
Visiblement, un redirect_to sur la même action (c'est ce que tu fais, tu viens de users/edit et tu redirect_to users/edit) va te poser un problème à ce niveau là . http://blog.lab49.com/archives/518 Peux tu donner la route telle que tu la donnes à redirect_to? Visiblement, s'il manque des paramètres, Rails va les chercher dans la requête courante et va prendre aussi les autres paramètres, donc ici ceux envoyés par un POST... Fernando Perez a écrit :
on 2009-06-18 21:06
Thomas wrote: > Visiblement, un redirect_to sur la même action (c'est ce que tu fais, tu > viens de users/edit et tu redirect_to users/edit) va te poser un > problème à ce niveau là . > > http://blog.lab49.com/archives/518 Cool je suis pas tout seul. > Peux tu donner la route telle que tu la donnes à redirect_to? > Visiblement, s'il manque des paramètres, Rails va les chercher dans la > requête courante et va prendre aussi les autres paramètres, donc ici > ceux envoyés par un POST... redirect_to edit_user_url(current_user.login) Je crois pas que le problème c'est Rails, c'est vraiment les browser qui sont mal fichus. Il faudrait feinter en redirigeant à une autre URL et qui pointe sur la même page.
on 2009-06-18 21:48
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=UTF-8" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> Fernando Perez a écrit :<br> <blockquote cite="mid:9980fe49814d372d9a6afccf051cd3a9@ruby-forum.com" type="cite"> <pre wrap=""><!---->redirect_to edit_user_url(current_user.login) Je crois pas que le problème c'est Rails, c'est vraiment les browser qui sont mal fichus. Il faudrait feinter en redirigeant à une autre URL et qui pointe sur la même page. </pre> </blockquote> Ben ici dans le lien que j'ai donné, il cite directement l'API expliquant comment sont formées les URL. Ici, pourquoi tu mets en paramètre current_user.login et pas simplement current_user? Car dans ton cas justement, peut-être que Rails va essayer de combler les paramètres manquants (qui auraient été passés avec juste current_user car tu mets l'objet) et reprend également les paramètres du POST...<br> <br> C'est juste une supposition...<br> <br> --~--~---------~--~----~------------~-------~--~----~<br> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. <br> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse railsfrance@googlegroups.com <br> Pour résilier votre abonnement envoyez un e-mail à l'adresse railsfrance-unsubscribe@googlegroups.com<br> -~----------~----~----~----~------~----~------~--~---<br> </body> </html> <br>
on 2009-06-18 22:25
> Ben ici dans le lien que j'ai donné, il cite directement l'API > expliquant comment sont formées les URL. Ici, pourquoi tu mets en > paramètre current_user.login et pas simplement current_user? Parce que /users/thomas/edit, c'est plus joli que /users/45126/edit ;-) Je vais tester différents trucs.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.