Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ruby > Ruby on Rails
Ruby on Rails Le forum sur le framework Ruby on Rails. Voir aussi la FAQ RoR et les cours RoR.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/07/2011, 19h18   #1
Candidat au titre de Membre du Club
 
Olivier Margarit
Inscription : février 2010
Messages : 36
Détails du profil
Informations personnelles :
Nom : Olivier Margarit

Informations forums :
Inscription : février 2010
Messages : 36
Points : 10
Points : 10
Par défaut Traitement de requête GET dans un Controlleur sans changer de vue.

Bonjour,
J'ai mélangé mon code ruby à une bibliothèque javascript pour me faire un bel album photo. Alors en amont tout se passe bien mais pour l'agrandissement d'une image, je suis obligé de passer par une requête de type GET. J'aimerais que le Controller, qui affiche l'album récupère cette requête parce qu'il doit effectuer un traitement avant l'affichage sur la même vue. Pour l'affichage je règle le problème avec une solution de type flash.now.
Pour récupérer ma requête je pense à un code du genre:
Code :
1
2
3
4
if requete.get?
url=requete.uri_string
traitement (url)
....
Mais ma requête arrivant par l'adresse www.mondomaine.com/album/photo/IMG012.jpg me renvoie l'erreur classique:
No route matches "/album/photo/IMG012.jpg" with {:method=>:get}
Or je voudrais non seulement que ma page ne se recharge pas mais également pouvoir traiter la requête. Je sais qu'il faut que je paramètre route.rb mais je commence à tourner en rond.
Je précise que mon controller se nomme album et l'action photo.
Les solutions du type link_to ou <a href=....></a> ne fonctionne pas et font planter le script java que je renonce a réécrire vu qu'il n'est pas de moi.
Merci de vous intéresser a mon problème.
Cordialement,
Olivier
pitispike est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h06   #2
Candidat au titre de Membre du Club
 
Olivier Margarit
Inscription : février 2010
Messages : 36
Détails du profil
Informations personnelles :
Nom : Olivier Margarit

Informations forums :
Inscription : février 2010
Messages : 36
Points : 10
Points : 10
Par défaut solution

Bon, j'ai trouvé la solution: laisser tomber le get pour un post et le résultat de la fonction javascript se gère donc comme un formulaire! A noter que ça ne passe pas si dans la classe on ne met pas:
Code :
protect_from_forgery :only => [:create, :update, :destroy]
problème d'authenticité.

Je suis sympa je donne le code javascript, ça pourra peut-être aider qelqu'un:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
onClick:            function() { 
 
		  method = "post"; // Set method to post by default, if not specified.
 
		  // The rest of this code assumes you are not using a library.
		  // It can be made less wordy if you use one.
		  var form = document.createElement("form");
		  form.setAttribute("method", method);
		  form.setAttribute("action", "/album/photo");
 
 
		    var hiddenField = document.createElement("input");
		    hiddenField.setAttribute("type", "hidden");
		    hiddenField.setAttribute("name", "bigger");
		    hiddenField.setAttribute("value", this.url);
 
		    form.appendChild(hiddenField);
 
 
		  document.body.appendChild(form);
		  form.submit();
		},   /* Onclick behaviour */
pitispike est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 11h11   #3
Modérateur
 
Inscription : janvier 2007
Messages : 511
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 511
Points : 559
Points : 559
Bonjour,

Je me permets d'intervenir pour faire quelques remarques négatives sur ta solution. En modifiant les routes, tu perds le côté Restful de ton appli, c'est dommage. En modifiant le protect_from_forgery, tu ouvres un beau trou de sécurité. Ton javascript obstrusif à mort n'est pas du tout conseillé.
En résumé, on est loin des bonnes pratiques.

Pour faire ce que tu cherches à faire : "Afficher une photo sans recharger la page" tu peux le faire avec Ajax (:remote => true). Tu peux utiliser la même méthode "show" en spécifiant dans ton contrôleur le format de sortie (html ou js) selon le cas.

Pour les traitements, je te conseille de les faire AVANT (Préparer 2 ou 3 photos de taille différente, prêtes à être affichées, et ne pas solliciter le serveur, lorsque l'appli est déployée)
Tu peux t'inspirer de cette solution par exemple :
http://rhotoalbum.rubyforge.org/
Zfred est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/08/2011, 19h47   #4
Candidat au titre de Membre du Club
 
Olivier Margarit
Inscription : février 2010
Messages : 36
Détails du profil
Informations personnelles :
Nom : Olivier Margarit

Informations forums :
Inscription : février 2010
Messages : 36
Points : 10
Points : 10
Merci pour la remarque, je vais regarder tout ça de près. Sinon, l'appli n'est pas destinée à une usage massif mais pour moi et ma copine. Cela dit, merci.
pitispike est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web