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 :

Utiliser une 'Grouped Selection list'(option_groups_from_collection_for_select)


Sujet :

Ruby on Rails

  1. #1
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut Utiliser une 'Grouped Selection list'(option_groups_from_collection_for_select)
    Je voudrais bien utiliser une liste "groupée" qui contienne des éléments dans une sorte hiérarchie. J'ai essayé avec option_groups_from_collection_for_select. Mais il y a 2 choses que je n'arrive pas à résoudre:
    1. Comment et où ajouter :prompt=> true pour avoir quelque chose comme 'Please select' ou :prompt=> 'Mon text personnalisé'.
    2. Comment avoir la valeur 'séttée' en cas d'édition. Pour l'instant en cas d'édition c'est toujours la première valeur de la liste qui se met en premier et non pas celle qui a été sélectionné auparavant.
    Donc, comme c'est expliqué dans 'Agile Web Development with Rails', j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <p>
     <%= order.label :shipping %><br />
     <select name="order[shipping_option]" id="order_shipping_option">
    <%=option_groups_from_collection_for_select(Shipping::OPTIONS,
    :options, :type_name,:id,:name,@order.shipping_option)%>
    </select>
    </p>
    J'utuilise 'act_as_tree' pour pouvoir créer plusieurs sous-catégories -'enfants' dans une des catégories 'parent'. Puis je les charge dans cette liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @shipping_options = ShippingOption.find(:all, :order=>:name).select{|item| item.parent.nil?}

  2. #2
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Il y avait encore un autre problème. D'après la description de OPTGROUP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Le tag optgroup est utilisé pour grouper au sein du contrôle liste de sélection ( balise <select>) 
    des éléments de même type. Le rendu des éléments inclus apparaît avec un décalage dans la liste de 
    sélection. Le texte écrit dans l'élément colgroup correspond au titre de la catégorie, il n'est pas sélectionnable.
     
    La balise optgroup est toujours inclue dans le tag select. Elle contient les tags <option> concernant la catégorie qu'elle décrit. Les tags <optgroup> ne sont utilisables qu'à un niveau (les imbriquer ne fait pas apparaitre de nouvelles catégories). L'affichage de la catégorie se fait avec l'application d'un style qui diffère suivant les navigateurs (italique, gras ...).
    On ne pouvait p

  3. #3
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Il y avait encore un autre problème. D'après la description de OPTGROUP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Le tag optgroup est utilisé pour grouper au sein du contrôle liste de sélection ( balise <select>) 
    des éléments de même type. Le rendu des éléments inclus apparaît avec un décalage dans la liste de 
    sélection. Le texte écrit dans l'élément colgroup correspond au titre de la catégorie, il n'est pas sélectionnable.
     
    La balise optgroup est toujours inclue dans le tag select. Elle contient les tags <option> concernant la catégorie qu'elle décrit. Les tags <optgroup> ne sont utilisables qu'à un niveau (les imbriquer ne fait pas apparaitre de nouvelles catégories). L'affichage de la catégorie se fait avec l'application d'un style qui diffère suivant les navigateurs (italique, gras ...).
    On ne peut pas sélectionner le 'parent'. Il fallait chipoter un peu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    dans application_helper.rb
     
    def option_from_collection_for_select_indent(collection, group_method, group_label_method, option_key_method, option_value_method,selected_key = nil, depth= 0,indent='  - ' )
     
        collection.inject("") do |options_for_select, group|
     
          group_id = group.send(option_key_method)
          children = group.send(group_method)
          options_for_select += "<option "
          options_for_select += " style=\"font-weight:bold\"" if children.length > 0 or depth ==0
          options_for_select += " value=\"#{group_id}\""
          options_for_select += " selected=\"selected\"" if group_id == selected_key
          options_for_select += ">#{indent * depth}#{group.send(group_label_method)}"
          options_for_select += '</option>'
          temp = depth+1
          options_for_select += option_from_collection_for_select_indent(group.send(group_method), group_method,  group_label_method,option_key_method, option_value_method,selected_key,temp,indent)
        end
      end
    dans mon partial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <p>
      <%= form.label :regional_object_id, 'Region/Sub-region' %><br />
      <select name="organization[regional_object_id]" id="regional_object_id">
        <%= option_from_collection_for_select_indent(@regions,:children, :name,:id,:name, @organization.regional_object_id)%>
      </select>
    </p>
    J'avoue que l'affichage de 'select list' n'est peut être pas trop joli, mais bon, en tout cas on peut choisir n'importe quelle catégorie/sous-catégorie sans vraiment chipoter avec CSS.

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

Discussions similaires

  1. [XL-2010] Fichier de validation de factures: Utiliser une zone de liste pour filtrer une base
    Par Arnold35 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/02/2015, 11h44
  2. [VxiR2] Utiliser une invite de liste dans une variable
    Par erwann_ dans le forum Deski
    Réponses: 3
    Dernier message: 21/02/2012, 15h29
  3. Réponses: 6
    Dernier message: 28/03/2007, 15h53
  4. Utiliser une liste de valeur dans un select
    Par in dans le forum Oracle
    Réponses: 13
    Dernier message: 09/01/2007, 11h33
  5. Réponses: 36
    Dernier message: 13/05/2004, 18h22

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