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 :

fonction acts_as_tree pour creer un arbre type organigramme


Sujet :

Ruby on Rails

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 12
    Points : 16
    Points
    16
    Par défaut fonction acts_as_tree pour creer un arbre type organigramme
    bonjour,

    j'ai un petit soucis et j'espere que quelqun pourra me donner un petit coup de main ....

    VOila j'utilise une classe user :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class CreateUsers < ActiveRecord::Migration
      def self.up
        create_table :users do |t|
            t.column :nom, :string
            t.column :prenom, :string
            t.column :mail, :string
            t.column :parent_id, :integer
    toute bete dans laquelle je lui indique la propriete acts_as_tree :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class User < ActiveRecord::Base
        acts_as_tree :order=>"nom"
    end

    ce qui devrait logiquement me permettre de recreer l'organigramme d'une societe...

    mais je n'arrive pas à faire afficher le responsable de la personne dans la view ... avec style parent.nom alors que le user.parent_id s'affiche bien si il existe:

    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
    21
    <h1>Liste des utilisateurs</h1>
     
    <table>
    <tr>
    <th>nom</th>
    <th>responsable</th>
    </tr>
     
    <% for user in @users %>
     
    <tr>
    <td><%=user.nom%></td>
    <td><%=user.parent_id%>  
    </td>
    </tr>
     
    <%end%>
    </table>
    <hr>
    <%=pagination_links(@user_pages)%>
    <hr>

    voilou si quelqun a une idee pour me filer un petit coup de main ce sera avec plaisir et gratitude.

    A pluche les gens

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Salut,

    Arf j'ai pas encore testé le act_as_tree, ce qu'il ne saurait tarder....
    Néanmoins, je comprends tout à fait ton probleme, et c'est normal que ça ne marche pas avec ton code.
    Pourquoi ? Parceque lorsque tu demandes user.parent_id, tu demandes une donnée qui est contenue dans l'enregistrement en cours...donc c'est ok.
    Mais si tu veux le nom du parent, il faut logiquement aller chercher l'enregistrement du parent, et lire le champ "nom".
    Or t'es dans une boucle à ce moment là, sur l'enregistrement fils...

    Je te propose une solution, que je n'ai pas testée, et qui n'est pas propre !
    Lol !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <% for user in @users %>
    <tr>
    <td><%=user.nom%></td>
    <td><% parent=User.find(:nom, :conditions => {:id=>user.parent_id}) %>
    <%= parent.nom %>
    </td>
    </tr>
    <%end%>
    Voila...Ca devrait le faire...
    Attention la syntaxe, je n'ai pas du tout testé...
    Tu vois l'idée : Faire une requete pour aller chercher ce qu'il te manque.
    C'est completement gorret vu que c'est une requete dans la vue...
    Ca a au moins le mérite de te débloquer en attendant de trouver mieux
    En théorie, les requetes se font dans le controleur ou le modele lui meme, si quelqu'un a une meilleure solution, n'hésitez pas !

  3. #3
    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,

    Pour ma part le acts_as_tree marche comme je m'y attends. Je peux tout à fait faire objet.parent.nom dans la vue

    Donne peut-être ta requête (User.find(...)) on sait jamais

    Essaye aussi en console (script/console) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > u = User.find(1) # Avec un ID qui existe bien sur
    > u.parent.nom
    Est-ce que ça marche dans ce cas là ?

    Bon courage


    @Zfred :
    Justement, l'interêt du acts_as_tree est de fournir des méthodes parent/children pour parcourir l'arbre sans faire les requêtes à la main
    De la même manière que les relations du type belongs_to/has_many.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Justement, l'interêt du acts_as_tree est de fournir des méthodes parent/children pour parcourir l'arbre sans faire les requêtes à la main
    C'est clair !

    Faudrait voir le mvc complet

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

Discussions similaires

  1. Fonction récursive pour obtenir un arbre
    Par TerrorOnCity dans le forum Langage
    Réponses: 9
    Dernier message: 31/05/2013, 00h49
  2. Réponses: 1
    Dernier message: 04/08/2011, 08h29
  3. Réponses: 6
    Dernier message: 12/04/2007, 20h30
  4. [Fonction](recursive) Problème pour dresser un arbre
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 21/11/2006, 13h35
  5. Fonctions récursives pour parcourir un arbre
    Par mikedavem dans le forum C
    Réponses: 4
    Dernier message: 05/06/2006, 12h00

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