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 :

has_one ou belongs_to


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 has_one ou belongs_to
    Comment peut-on définir un 'coordinator' pour un 'projet' dans telle situation:
    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
     
    class Participant < ActiveRecord::Base
      has_many :developments
      has_many :projects, :through=>:developments 
    end
     
    class Development < ActiveRecord::Base
      belongs_to :project
      belongs_to :participant
    end
     
    class Project < ActiveRecord::Base
      has_many :developments
      has_many :participants, :through=>:developments  
    end
    vu que chaque 'projet' peut avoir un ou plusieurs 'developpers( 'partcicipants') et chaque 'developper' ('participant) peut participer dans un ou plusieurs 'projets' pas absolument en tant que 'coordinator'.
    Dans la table 'Developments' j'ai les champs id, project_id, participant_id et 'coordinator'. Comment indiquer que un des 'developpers' participant dans le projet est son coordinator et faire pointer la colonne 'coordinator' dans la table 'Developments' vers 'participant_id' sur la même ligne?

    belongs_to :coordinator, :foreign_key=>'

  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
    faire pointer la colonne 'coordinator' dans la table 'Developments' vers 'participant_id' sur la même ligne?
    Tu peux nous donner ton schéma peut-être ? Personnellement j'aurais effectivement fait une colonne coordinator sur Developpement mais de type bool, auquel cas la "faire pointer" n'a aucun sens
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  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
    Voici le schéma:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    ActiveRecord::Schema.define(:version => 20090203205241) do
     
      create_table "developments", :force => true do |t|
        t.integer  "project_id"
        t.integer  "participant_id"
        t.datetime "created_at"
        t.datetime "updated_at"
      end
     
      create_table "participants", :force => true do |t|
        t.string   "type"
        t.string   "title"
        t.string   "lastname"
        t.string   "firstname"
        t.string   "mail"
        t.string   "phone"
        t.string   "dept"
        t.datetime "created_at"
        t.datetime "updated_at"
      end
     
      create_table "projects", :force => true do |t|
        t.string   "desc"
        t.date     "started"
        t.date     "ended"
        t.datetime "created_at"
        t.datetime "updated_at"
      end
     
    end
    Même si je mets la colonne 'coordinator' dans 'developments' comme boolean, qu'est-ce que ça change. Je crois qu'il faut plutôt mettre participant_id dans 'Projects'. Mais dans ce (je vais en parler au client) il n'y aura qu'un seul coordinator par Project. Si jamais il y'en aura plusieurs, là ça ne passera pas. Je verrais la table 'Developments ' comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id   project_id  participant_id  coordinator
    1       1              7                   7(ou true si on choisit boolean)
    2       1             12                   null(ou false)
    3       1             45                   45(ou true si on choisit boolean)
    Comme ça on pourrait toujours trouver les coordinateurs, develooppers, externs, etc. par projet.

  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
    Dans le premier cas, je vois pas l'intérêt de remettre la même info dans coordinator et participant_id Mais bon à la limite ça peut fonctionner, il suffit de regarder si la colonne coordinator est nulle ou pas.


    Dans le deuxième cas participant_id la table Project, ça marche aussi mais comme tu dis ça ne permet d'avoir qu'un coordinateur par projet donc il faut voir si ça correspond à ton problème. Le souci c'est plutôt que c'est redondant avec l'association N-N Project <-> Participant.

    Bref là c'est un problème de conception de ton schema de données
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  5. #5
    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
    C'est pas évident de faire passer la logique d'encodage utilisée avant dans de simples fichiers Excel à une BD, surtout quand il faut négocier chaque petit détail avec des gens qui sont pas 'si proches' de la programmation (c'est le moins méchant terme que je peux y trouver). Mais bon, il faut vivre avec. Après de très longues négociations, il ne faudra qu'un seul coordinator par Projet, ce qui facilitera ma tache. Il ne restera qu'à rajouter un test dans le modèle Project pour vérifier si le participant en question 'participe' dans le projet avant de lui attribuer le rôle de Coordinator.
    Merci pour les 'feed-backs', je ne sais pas comment les gens bossaient avant sans avoir de l'aide souvent si précieuse.

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

Discussions similaires

  1. [Débutant] Travail avec 2 tables en :has_many et :belongs_to
    Par Miles Raymond dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 04/03/2009, 23h49
  2. Comment fonctionne le has_many ? (has_one vs belongs_to)
    Par kedare dans le forum Ruby on Rails
    Réponses: 10
    Dernier message: 01/12/2008, 17h52

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