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 :

affichage "ancestors" - acts_as_tree


Sujet :

Ruby on Rails

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 84
    Points
    84
    Par défaut affichage "ancestors" - acts_as_tree
    J'utilise acts_as_tree pour gérer mes catégories. (avec une relation habtm pour les gérer comme des tags mais la question n'est pas là ...)

    J'aimerais afficher quelque chose comme çà:
    titre_categorie_1ere_niveau >> titre_categorie_deuxième_niveau >> ... >> catégorie actuelle.

    exemple:
    informatique >> programmation >> RubyOnRails

    j'ai une table categories avec 3 champs (id , name , parent_id)
    voici mon controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def lister_parents_categorie
        categorie_id = params[:id]
        categorie = Categorie.find_by_id(categorie_id)
        @categories_superieures = categorie.ancestors
      end
    ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <% for categorie in @categories_superieures %>
    <%= categorie.name %><br>
    <% end %>
    cela fonctionne bien, j'obtient cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rubyonrails
    programmation
    informatique
    racine
    j'aimerais que "racine" ne s'affiche pas et inverser l'ordre des categories pour les afficher en ligne.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    La doc ruby est (presque) ton amie
    Je te conseille en particulier le site GotAPI qui est très pratique pour chercher dans la doc de Ruby/Rails

    Pour ton problème, il suffit d'inverser le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def lister_parents_categorie
      categorie.find(params[:id])
      @categories_superieures = categorie.ancestors[0..-2].reverse
    end
    [0..-2] supprime le dernier élément (racine) avant d'inverser.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 84
    Points
    84
    Par défaut
    merci beaucoup pour le lien. J'avais d'autres site sur la doc rails mais celui-là est particulièrement bien conçu.

    J'ai pas bien compris d'où vient le [0..-2] car je sens que vais souvent avoir à utiliser ce genre de méthode

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    C'est tout simplement l'opérateur [] de Array. Si tu lui passe un range, il retourne les éléments du tableau correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = [ "a", "b", "c", "d", "e" ]
    a[1..3]    #=> [ "b", "c", "d" ] : elements entre 1 et 3 (inclus)
    a[-2]      #=> [ "d" ] : un nombre négatif signifie "en partant de la fin"
    a[0..-2]   #=> [ "a", "b", "c", "d" ] : elements entre 0 et le 2é en partant de la fin
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  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
    et ça marche également avec les chaînes :

    http://pbnaigeon.developpez.com/tuto...ec-ruby/#LII-D
    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 régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 84
    Points
    84
    Par défaut
    merci pour le petit cour de Ruby

    je crois que je vais devoir investir dans un bouquin traitant exclusivement de Ruby (car c'est un peu léger dans les livres sur RoR) mais avant tout dans le dernier O'Reilly "Rails par l'exemple".

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

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