Ouverture de session

Commentaires récents

Syndication
Flux XML

Problème avec collection_select

Problème avec collection_select
Posté par treguidel le Mardi, 13 Mai, 2008 - 6:50pm. Débuter avec Rails

Bonjour
J'ai une petite application issu de tous les tutoriels (CRUD), dans le controller:
def edit
@ouvrier = Ouvrier.find(params[:id])
end
Dans le formulaire d'édition, j'ai un collection_select qui sert à modifier le nombre d'enfants

collection_select(:ouvrier :famille, Ouvrier.find(:all), :id, :famille) qui ne marche pas du tout, je ne comprends la syntaxe de l'API rails, ce que je voudrais faire, c'est dans le drop-down, voir la valeur qui est dans la table pour cet ouvrier et pouvoir la modifier avec le drop-down. J'ai essayé avec un select html, ça marche. Le code html ci dessous.
select name="ouvrier[famille]" /
option %= @ouvrier.famille.to_s % /option
option value=0 0 /option
option value=1 1 /option
option value=2 2 /option
option value=3 3 /option
/select
Si quelqu'un peut m'aider, merci



[ 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: 
collection_select
Auteur: 
epijulien
Date: 
Mer, 14/05/2008 - 00:07

Bonjour,

Le fonctionnement de collection_select se trouve ici:
http://wiki.rubyonrails.org/rails/pages/HowtoUseFormOptionHelpers

  • id is the client column whose value will be used to set the client_id and name is the client column that contains the text to be displayed.

  • 2 choses a noter:

    1)Ouvrier.find(:all) se fait dans le controller et non dans la vue => @all_ouvriers = Ouvrier.find(:all) et tu reutilise la variable @all_ouvriers dans ta vue (sans oublier les 's' a la fin, vue que :all va en prendre plusieurs)

    2)Vu les les 2 dernier parametres, la liste deroulante equivaudra a

    option value="id" name /option

    Comme c'est un ouvrier.find(:ALL), la liste contiendra pour chaque ouvrier trouve dans la base de donne le nombre d'enfant associe avec l' id de l'ouvrier.

    Si le but est de mettre un nombre comme le nombre d'enfants:

    Le collection_select est a utilise lorsque l'on a a faire avec une table qui contient des categories. La pour le nombre d'enfant, ce n'est pas dans une table: une liste allant de 0 a 15 doit amplement suffire => rien a extraire d'une table, donc faut faire du html classique.
    Ton code HTML est donc la bonne reponse.

    Ca c'est pour le nombre d'enfant comme tu semble en avoir besoin. L'explication apres t'aidera a comprendre a quoi sert vraiment le collection select.

    Si par contre famille pointe sur une table de la base de donnees, alors c'est le troisieme argument qui est faux: en effet, c'est pas la liste d'ouvriers que l'on veut, mais la liste de famille=> dans l'action il faut mettre
    @familles = Famille.find(:all) [et non pas Ouvrier.find(:all)]
    et dans la vue:
    collection_select(:ouvrier :famille, @familles, :id, :famille)

    C'est assez long, mais comme tu disais ne pas comprendre le fonctionement de collection_ select, je me suis dit qu'en plus de resoudre le probleme, il etait important de t'aider a y voir plus clair.

    N'hesite pas si tu as d'autres questions :-)

    epijulien


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

    Nouveaux liens

    Sondage
    Lorsque je développe avec Ruby on Rails c'est principalement sous:
    Linux
    37%
    Mac OS X
    29%
    Windows
    32%
    (Free|Open|Net) BSD
    1%
    Autre...
    1%
    Nombre de votes: 356

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

    railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
    [ Hébergement et ressources techniques gracieusement fournis par la SSLL Nuxos Group ]