Bonjour, J'ai besoin de développer une relation polymorphique et de stocker le type de la table de référence et l'id dans deux tables différentes (comme ca, ca ne doit pas être très clair). Voilà l'exemple : table PERSONNES - id -... table VILLES - id - nom table PAYS - id - nom table MANDATS - id - nom - lieu_type = VILLE ou PAYS table ELUS - id - personne_id - mandat_id - lieu_id -> fait référence à la table VILLES ou PAYS en fonction du lieu_type du mandat associé Est-il possible de mettre ca en place ? Si non, quelle solution voyez-vous pour obtenir un résultat similaire ? Merci à tous Adrien
on 28.06.2009 08:42
on 28.06.2009 09:29
Bonjour, C'est possible, mais est tu sur d'avoir besoin de la table Elus ? avec personnes, villes, pays et mandats pour faire la jointure tu devrais pourvoir t'en sortir, non ? Le 28 juin 09 à 08:42, Adrien Nom a écrit :
on 28.06.2009 10:08
Oui j'ai besoin de la table ELUS car une personne peut avoir plusieurs mandats, j'ajoute aussi dans la table ELUS un champ booléen `ancien` qui indique si c'est un renouvelement du mandat ou pas.
on 28.06.2009 13:17
Quelqu'un peut-il me dire comment réaliser ca en rails, malgrè mes recherches je ne trouve rien :s Je lis l'anglais mais ne cherche peut-être pas bien.
on 28.06.2009 13:30
> Oui j'ai besoin de la table ELUS car une personne peut avoir plusieurs > mandats, j'ajoute aussi dans la table ELUS un champ booléen `ancien` qui > indique si c'est un renouvelement du mandat ou pas. > D'après ce que j'en comprends, ce n'est pas un argument. Si dans ta table mandat tu ajoutes un personne_id, tu as donc une relation personne has_many mandats et mandats belongs-o personne, une personne pourra avoir plusieurs mandats sans soucis. de plus dans cette meme table mandats tu peux rajouter ton champ 'ancien'. gUI -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://fr.openoffice.org/
on 28.06.2009 13:39
Ok je n'avais pas bien compris ce que tu voulais dire, alors non cela ne me va pas car MANDATS sert à lister les mandats possibles existants. Il n'y a pas forcément une personne élue pour chaque mandat, certains ne seront peut être pas utilisés.
on 28.06.2009 17:01
c'est un autre Guillaume qui avait posté dans un premier temps (-; peut-il y avoir plus d'une personne sur un meme mandat ? gUI Le 28 juin 2009 13:39, Adrien Nom <list-incoming@andreas-s.net> a écrit : > > Ok je n'avais pas bien compris ce que tu voulais dire, alors non cela ne > me va pas car MANDATS sert à lister les mandats possibles existants. Il > n'y a pas forcément une personne élue pour chaque mandat, certains ne > seront peut être pas utilisés. > -- > Posted via http://www.ruby-forum.com/. > > > > -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://fr.openoffice.org/
on 28.06.2009 18:02
Guillaume Betous wrote: > c'est un autre Guillaume qui avait posté dans un premier temps (-; oups je n'avais pas vu, désolé > > peut-il y avoir plus d'une personne sur un meme mandat ? oui il peut y avoir plusieurs personne pour un même mandat bon je donne des exemples pour expliciter un peu tout ca : ce que j'ai prévu : - mandat vas contenir des enregistrement du genre (0,maire,villes) (1,conseiller municipal,villes) (2,ministre,pays) (3,président,pays) - elu va contenir des enregistrement du genre : (0,jacques machin,maire,poitiers) (1,michel ducoin,maire,chatellerault) (2,jacques vigneret,conseiller municipal,angouleme) (3,monique dufour,ministre,france) (4,martine dugalet,presidente,irlande) NB: j'ai remplacé personne_id,mandat_id,ville_id par personne.nom,mandat.nom,ville.nom la table mandat me sert à obtenir la liste des mandats possibles pour les afficher dans un formulaire où l'on choisira les mandats de chaque personne. donc les solutions que je vois sont : 1) ce que j'ai dit premièrement 2) ajouter (dupliquer) type_lieu dans la table elus (c'est peut être le plus simple même si ce n'est pas très propre?) 2) grouper les tables elus et mandats : MANDATS - id - nom - lieu_id - lieu_type - personne_id auxquels cas je stockerai la liste des mandats possibles en créant des mandats associés à aucune personne (ce sera la liste des mandats que j'affiche dans le formulaire) Une autre précision un peu hors sujet : Il faudrait aussi que je laisse la possibilité à l'utilisateur d'ajouter des mandats et des types de lieu (donc de créer une nouvelle table de lieu par exemple DEPARTEMENTS), je ne sais pas si je pourrai y arriver sans que l'on ai à modifier du code mais si oui, ma solution devrait être celle qui permet de faire ca. J'espère que j'ai été clair. Merci pour votre aide ! adrien
on 28.06.2009 18:10
> oui il peut y avoir plusieurs personne pour un même mandat ok, je vois. je suis pas du tout specialiste du polmorphisme, je pense que ce que j'aurais fait à ta place c'est tout simplement de mettre 2 id dans ELU, par exemple pays_id et ville_id, et selon le mandat, je remplis l'un ou l'autre (et j'utilise l'un ou l'autre). mais je suis pas sur que ce soit la solution la plus élégante. gUI -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://fr.openoffice.org/
on 28.06.2009 18:13
hum, merci mais non cette solution ne me convient pas, c'est trop moche :-) je préfère encore dupliquer type_lieu dans les tables MANDATS et ELUS si quelqu'un d'autre pouvez me conseiller, j'aimerai développer ca le plus proprement possible ! adrien
on 28.06.2009 20:07
Salut ! 1ère remarque : tu aimerais faire cela le plus proprement possible comme tu le dis, donc déjà n'utilise jamais de variables ou de noms de tables en Français dans tes logiciels, et cela quel que soit ton logiciel. 2ème remarque : a mon avis ça serait très simple à implémenter en Rails si tes modèles City et Country découlent en STI d'un modèle Place. D'ailleurs en regardant ton schéma ils ont pour l'instant les mêmes attributs. Nicolas. Le 28 juin 2009 08:42, Adrien Nom<list-incoming@andreas-s.net> a écrit :
on 28.06.2009 20:20
Nicolas Blanco wrote: > Salut ! > > 1�re remarque : tu aimerais faire cela le plus proprement possible > comme tu le dis, donc d�j� n'utilise jamais de variables ou de noms de > tables en Fran�ais dans tes logiciels, et cela quel que soit ton > logiciel. je vais y penser, mais ca me semble fastidieux de chercher tous les termes en anglais, surtout que cette aplication ne sera jamais traduite. c'est peut être pas très joli mais ca ne change quand même pas grand chose ? > 2�me remarque : a mon avis �a serait tr�s simple � impl�menter en > Rails si tes mod�les City et Country d�coulent en STI d'un mod�le > Place. D'ailleurs en regardant ton sch�ma ils ont pour l'instant les > m�mes attributs. C'est vrai mais j'ai beaucoup simplifié le schéma, en fait pour Ville il y aura comme information l'adresse de la mairie, telephone, email,etc.. autant d'information qui sont inutiles dans la table pays. Je peux quand même faire une table lieu polymorphique : LIEUX - id - lieu_type - lieu_id qui renverrai vers les différentes tables de lieu mais c'est moche aussi non ? sachant qu'il y a beaucoup de table de lieu (pays,regions,departements,communes,cantons...), je ne pense pas que ce soit bien de faire ca ? Plus ca va, plus je me demande bien comment je vais résoudre ce problème :S Ma première solution n'est vraiment pas correcte? Quelle autre approche je peux avoir ? Dupliquer le champ lieu_type n'est pas optimal mais il n'y a pas non plus de risque d'incohérence car le type de lieu correspondant a un mandat ne changera jamais. Merci adrien
on 28.06.2009 22:09
> c'est peut être pas très joli mais ca ne change quand même pas grand > chose ? c'est surtout très piégeux, Rails considérant les singluiers et pluriels à l'anglaise. gUI -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://fr.openoffice.org/
on 29.06.2009 09:06
Je saurai y faire attention :) merci