Forum: Rails France Formulaire qui redirige sur la même page

Posted by Fernando Perez (fernando)
on 2009-06-18 14:19
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.
Posted by Thomas (Guest)
on 2009-06-18 14:30
(Received via mailing list)
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 :
Posted by Fernando Perez (fernando)
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.
Posted by Martin Catty (Guest)
on 2009-06-18 15:15
(Received via mailing list)
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
Posted by Thomas (Guest)
on 2009-06-18 15:17
(Received via mailing list)
<!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 
&quot;Railsfrance&quot; 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>
Posted by Thomas (Guest)
on 2009-06-18 15:46
(Received via mailing list)
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 :
Posted by Fernando Perez (fernando)
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.
Posted by Thomas (Guest)
on 2009-06-18 21:48
(Received via mailing list)
<!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 
&quot;Railsfrance&quot; 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>
Posted by Fernando Perez (fernando)
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
No account? Register here.