Formulaire qui redirige sur la même page

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.

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 P. a écrit :

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.

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 C. || fuse
http://www.noremember.org

Ah oui c vrai avec la redirection c'est un GET.

Martin C. a écrit :
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é.
  


--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google G..
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected]
-~----------~----~----~----~------~----~------~--~---

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.

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 P. a écrit :

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 :wink:

Je vais tester différents trucs.

Fernando P. a écrit :
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.

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

C'est juste une supposition...

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google G..
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected]
-~----------~----~----~----~------~----~------~--~---