IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Itérer sur la variable params


Sujet :

Ruby on Rails

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Itérer sur la variable params
    Je sèche sur une automatisation de recherche dans une hashtable.
    Plus précisément dans ma variable params, j'ai un tableau nommé personne et n tableaux enfants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PARAMS
    personne: !map:HashWithIndifferentAccess 
      nom: "toto"
      prenom: "tata"
    enfant1: !map:HashWithIndifferentAccess 
      age: "10"
      annee: "1980"
    enfant2: !map:HashWithIndifferentAccess 
      age: "20"
      annee: "1970"
    commit: Enregistrer
    action: creer
    controller: recette
    Comment puis je facilement itérer sur les tableaux enfants style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    params[:enfantn].each do
      traitement age
      traitement annee
    end
    n étant un numéro.

    Je sèche.

    Merci pour votre aide

    Si quelqu'un a des ressources sur les expressions régulières pour ruby, je suis preneur.

  2. #2
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    tu entends quoi par intérer ?

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    3.times do |n|
       puts eval('params[:enfant'+i.to_s+']')
    end
    Qui a dit "berk" ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    En fait je souhaite pouvoir travailler "enfant" par "enfant" mais comme j'ai un numéro différenciant chaque enfant, je ne sais pas comment faire. En utilisant une expression régulière peut être ?

    Mr. N, j'avais pensé à cette solution mais le problème c'est que je ne peux connaitre à l'avance le nombre de tableau enfant.

    Je ne vois même pas comment je peux compter le nombre d'entrée commençant par enfant dans ma variable params.

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Est-ce qu'il ne serait pas mieux de créer un tableau enfants[] dont chaque élément serait un hash contenant les différents noms et prénoms ?

    ce serait plus simple et plus propre
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Pour appliquer cette solution, il faut donc que je recontruise à ma façon la variable params suite à la validation de mon formulaire.

    Et je ne suis pas assez calé en rails, je ne sais pas comment on peut faire ça.

    Il n'y a pas moyen de compter le nombre de clé d'un tableau hash dont le nom commence par une motif de chaîne précis ? par exemple ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    params.keys(/enfant/).count

  7. #7
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    je suppose que tes données proviennent d'un formulaire non ?

    si c'est le cas, tu peux donner comme nom à ton champs enfant[X], ce qui te créera directement un tableau
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Pourquoi pas un simple tableau plutot qu'un hash ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Cela correspond à écrire cela dans ma vue ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <td>
        <%= text_field "enfant[]", "nom" %>
      </td>
      <td>
        <%= text_field "enfant[]", "prenom" %>
      </td>
    Si c'est le cas, j'obtiens cette exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object[] naming but object param and @object var don't exist or don't respond to id_before_type_cast: nil

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    utilise le parametre supplémentaire 'index'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <td>
        <%= text_field "enfant[]", "nom", "index" => 1 %>
      </td>
      <td>
        <%= text_field "enfant[]", "prenom", "index" => 1 %>
      </td>
    Cf. http://api.rubyonrails.org/classes/A...r.html#M000496

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Sans utiliser de tableau dans ta vue, tu peux faire une boucle qui s'arrêtera au dernier enfant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    n = 1
    until params["enfant#{n}".to_sym].nil? do
      enfant = params["enfant#{n}".to_sym]
      traitement age
      traitement annee
      n += 1
    end
    J'ai pas testé mais tu vois le raisonnement: incrémenter n et vérifier si l'enfant n est présent dans params.

    Mais la version la plus propre est d'utiliser un tableau dans ta vue.
    Pour cela essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      <td>
        <%= text_field "enfant", "nom", "index" => 1 %>
      </td>
      <td>
        <%= text_field "enfant", "prenom", "index" => 1 %>
      </td>

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Super merci.

    Juste pour correction Mr N, il ne faut pas de [] après enfant, cela ne marche pas. J'ai suivi l'API et cela marche.

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Aux temps pour moi... copier coller abusif

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je debute avec Rails et j'ai un probleme similaire. Je voudrais remplir un formulaire avec une liste de participants pour un evenement, associer une check_box pour chacun de ces participants et etre capable de voir dans le controlleur quels sont les participants qui ont ete selectionnes. Le nombre de participants peut varier, ce qui me pose probleme. J'arrive a savoir par exemple si le participant 2 a ete selectionne mais je n'arrive pas a faire une boucle pour verifier cela pour chaque participant.

    Vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <% @other_users.each do |other_users| %>
    <%= other_users.firstname %>
    <%= other_users.lastname %>
    <%= check_box "user_event", "checked_#{other_users.id}" %>
    <br/>
    <% end %>
    Controlleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @other_users.each do |other_users|
    test = eval('params[:user_event][:checked_'+other_users.id.to_s+']')
    end
    test2 = params[:user_event][:checked_2]
    test3 = params[:user_event][:checked_3]
    test4 = params[:user_event][:checked_4]
    flash.now[:notice] = "#{test} + #{test2} + #{test3} + #{test4}"
    En cochant les participants 2, 3 et 4, j'obtient dans le message flash :
    + 1 + 1 + 1.
    Je n'arrive donc pas a recuperer la valeur dans test. Je ne sais trop comment faire.

    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Ajouter un listener sur une variable
    Par serwol dans le forum Général Java
    Réponses: 4
    Dernier message: 14/10/2005, 15h39
  3. [STRUTS] Itérer sur une HashMap
    Par s.grenet dans le forum Struts 1
    Réponses: 5
    Dernier message: 06/04/2005, 13h26
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. Réponses: 4
    Dernier message: 15/12/2002, 04h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo