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 :

Jointure et Has_and_belongs_to_many


Sujet :

Ruby on Rails

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 44
    Points : 34
    Points
    34
    Par défaut Jointure et Has_and_belongs_to_many
    Bonjour, j'ai besoin de votre aide, je débute.

    J'ai trois fichiers : utilisateur, client et client_utiliateur.

    Les 3 fichiers sont ainsi :

    utilisateur
    identifiant
    mot_de_passe

    client
    code_client
    nom
    prenom

    client_utilisateur
    identifiant
    code_client

    Sachant que client_utilisateur fais le lien pour savoir queles utilisateurs peuvent accéder au client et inversement, à quels clients peut accéder l'utilisateur.

    Est ce que vous pouvez m'aider pour cette déclaration ?

    PS : Je tiens à préciser que la table client_utilisateur n'a pas le champ ID par defaut.


    merci

  2. #2
    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

  3. #3
    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
    J'ai trois fichiers : utilisateur, client et client_utiliateur
    ??? Comment ça 3 fichiers ? 3 modeles tu veux dire ?

    En théorie, tu devrais avoir
    - 2 modeles : Utilisateur.rb Client.rb
    - 3 tables : utilisateurs clients clients_utilisateurs
    - 1 controlleur

    Si tu veux que la magie de Rails fonctionne, il faut déja respecter l'orthographe (par exemple la table d'association doit s'appeller clients_utilisateurs et non pas client_utilisateur...)
    Ensuite il te faut définir la méthode pour associer tes 2 modeles :
    - Soit définir une association habtm dans chacun
    - Soit utiliser l'association :through
    - Soit générer un modele intermédiaire et faire des associations has_many et belongs_to

    Bon courage

  4. #4
    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
    2 modeles : Utilisateur.rb Client.rb
    tu voulais dire 3 models ?
    utilisateur
    client
    client_utilisateur

  5. #5
    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
    Non 2
    Apres ça dépend de l'association que tu utilises.
    Il est parfois judicieux de générer un 3eme modele sur la table d'association.
    Mais si tu n'en n'a pas l'utilité, ne vas pas générer des modeles pour le plaisir !

    Et puis je me permet une remarque au passage : Si tu généres un modele sur l'association, tant qu'à faire, donne lui un nom sympa !
    Par exemple dans le cas présent, je l'appellerais Gestion, ou Achat, ou Sav...enfin quelquechose qui se rapproche de la fonction métier...

    Il y a de la doc p257 du livre Ruby on Rails 1ere Edition

  6. #6
    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
    Non 2
    Apres ça dépend de l'association que tu utilises.
    Il est parfois judicieux de générer un 3eme modele sur la table d'association.
    Avec quelle assos tu veux utiliser deux models. J'aimerais bien voir ton exemple je rapelle pour ce qui ne savent pas
    que Has_many :though est lègèrement différent depuis Rails 1.1

    Mais si tu n'en n'a pas l'utilité, ne vas pas générer des modeles pour le plaisir !
    non simplement les conventions
    Une table = model

  7. #7
    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
    Client
    has_and_belongs_to_many :utilisateurs

    Utilisateur
    has_and_belongs_to_many :clients

    Et il faut créer à la main la table clients_utilisateurs qui contient 2 champs :
    utilisateur_id
    client_id

    (Pas de has_many :though)

  8. #8
    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
    Le mieux c'est encore la doc officielle :
    http://wiki.rubyonrails.org/rails/pa...elongs_to_many

    Je vais pas traduire mais en gros ça dit :
    - has_and_belongs_to_many crée une relation NN entre 2 modeles.
    - Si on a besoin que l'association soit porteuse de données, on peut stocker les données dans la table utilisateurs OU la table clients, et on y accede grace à :through
    - On accede à des méthodes implicites : push_with_attributes + les méthodes standard...
    - Ca buggue si il y a un champ id dans la table intermédiaire

    -----------------------------------------------------------------------------------

    Ce que j'en dis (mais c'est un avis perso) :
    - Si j'ai juste besoin de créer une association NN, has_and_belongs_to_many est parfait.
    - Si l'association est porteuse de données, alors je fais un modele intermédiaire, (donc un champ id) et des relations simples has_many et belongs_to
    Je rajoute des méthodes directement dans ce modele intermédiaire et je gere à partir de lui.
    - Le probleme du :through c'est qu'on ne sais jamais par quel bout le prendre.
    Mais c'est une solution solide aussi.

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

Discussions similaires

  1. pb jointure texture
    Par dweis dans le forum DirectX
    Réponses: 2
    Dernier message: 24/06/2003, 13h33
  2. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21
  3. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  4. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 12h51

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