Ouverture de session

Commentaires récents

Syndication
Flux XML

Liste déroulante - Select - Help

Liste déroulante - Select - Help
Posté par P1ngU le Lundi, 20 Juillet, 2009 - 5:13pm. Débuter avec Rails

Bonjour,

je souhaiterais créer deux listes déroulantes, dont la deuxième dépend du choix de la première.
Je m'explique :
J'ai une table entreprise, et une autre table Métier. Ces deux tables sont reliées par une liaison de type HABTM.
(une entreprise peut être spécialisée dans différents métiers, et un métier peut être exercé dans différentes entreprises).

Je souhaiterais créer un formulaire où l'utilisateur doit d'abord choisir une entreprise dans une liste, j'ai donc le code suivant :

"---------------") %>

Selon ce que choisit l'utilisateur, la liste suivante doit afficher exactement les métiers de l'entreprise choisie, et non pas tous les métiers enregistrés dans la BDD.

Mon problème est que le "select" ne met pas à jour la page, et ainsi rien ne se passe dans la liste concernant le choix de métier.

Si je ne suis pas assez clair, pensez par exemple aux nombreux formulaires sur le net, demandant de renseigner le pays, puis la région.
Quand on choisit un pays en particulier, la liste de choix de régions s'actualise en direct.

Quelqu'un a une solution à mon problème ?



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
Code ?
Auteur: 
jasperiel
Date: 
Lun, 20/07/2009 - 17:31

Bonjour,

> Mon problème est que le "select" ne met pas à jour la page
> et ainsi rien ne se passe dans la liste concernant le choix de métier.

n'hésite pas à nous donner ta première version de code qui ne marche pas, pour que l'on puisse t'aider. Sinon, là comme ça, c'est un peu vague...

S'il y a une requête à faire, tu peux utiliser l'AJAX, mais pour un usage simple et si ça ne choque pas d'envoyer toutes les possibilités (donc sauf base gigantesque ou données confidentielles), tu peux t'en sortir assez simplement avec une fonction javascript côté client.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
En effet, mon code s'est mal
Auteur: 
P1ngU
Date: 
Mar, 21/07/2009 - 08:39

En effet, mon code s'est mal affiché

Dans un fichier "project.rb" ,j'ai la méthode suivante :

def get_companies
self.users.find(:all).collect{|p| [p.company.name, p.company_id]}
end

Cette méthode retourne sous la forme : [ [..], [..], [..], ...] l'ensemble des entreprises travaillant sur un même projet
Exemple : [ ["Entreprise 1"], ["Entreprise 2"]]

Dans ma vue, j'utilise ceci :

form.select(:company_name, @current_project.get_companies,:prompt => "-----------------------")

Si j'ai bien compris, la valeur de @current_project.get_companies sera stockée dans company_name...quand j'aurai validé le formulaire, i.e. quand j'appuie sur le bouton "valider" en bas de la page.

Ensuite, suit ce code :

form.select(:job, Company.find_by_name(:company_name).get_jobs, :prompt => "-----------------------")

Evidement, cela ne fonctionne pas car :company_name est null à ce moment (le formulaire n'a pas encore été validé.)

Je souhaiterais faire en sorte que la deuxième liste "se mette à jour" dès lors que l'utilisateur fait un choix dans la liste d'entreprise.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
HTTP, protocole déconnecté
Auteur: 
jasperiel
Date: 
Mar, 21/07/2009 - 11:30

Eh oui, c'est le souci (et la force !) de HTTP.
Une fois la page HTML générée par Rails et envoyée au client, elle ne bouge plus.
Tu peux utiliser le Javascript pour donner des comportements "intelligents" sur la page une fois envoyée, mais elle est strictement chez le client et coupée du monde.

À partir de là, ou bien tu fais des requêtes AJAX (cherche tout ce qui est "remote" dans la doc) pour que la page envoie une demande et reçoive une réponse de l'isolement où il est.
C'est la mode, il faut vraiment penser "astronautes sur la lune" : le message est lent et peut se perdre.

Ou bien tu décides dès le départ de lui envoyer toutes les données et de coder toi-même le javascript correspondant : mettre une variable avec les données associées et éplucher la doc Prototype (Event, Element, bind...).
Je trouve ça plus propre, plus performant, plus facile et moins risqué. Mais si ces données sont trop volumineuses ou que leur accès est censé être restreint selon divers facteurs, il faut vérifier que tu n'envoies que le strict minimum pour travailler.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Qui est en ligne
Il y a actuellement 1 utilisateur et 20 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Propulsé par Drupal ]