Ouverture de session

Commentaires récents

Syndication
Flux XML

Relation polymorphique compliqué

Relation polymorphique compliqué
Posté par bobbus1111 le Mardi, 30 Juin, 2009 - 10:14am. Débuter avec Rails

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
- tel_mairie
- adresse_mairie

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é

un exemple ce qu'il peut y avoir dans les tables :
- 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 décrit ci-dessus mais je ne sais pas comment l'implémenter
2) ajouter (dupliquer) type_lieu dans la table elus (c'est peut être le
plus simple même 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)

Quelles solutions vous parait être la meilleure ?
Comment peut-on implémenter une relation polymorphique dans laquelle on doit lire le type de lieu_id dans une autre table ?

Merci à tous



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
Rails Polymorphe via STI
Auteur: 
jasperiel
Date: 
Mar, 30/06/2009 - 13:06

Rails le gère pour toi, via la méthode Single Table Inheritance, pour les héritages simples.

Par exemple, lieu est une classe "virtuelle" (c'est pas trop du langage Ruby mais bon), elle abstrait le concept de lieu, qui est soit une ville soit un pays.

class Lieu < ActiveRecord::Base [...]
class Ville < Lieu [...]
class Pays < Lieu [...]

Ensuite, tout devrait se passer sans problème : quand tu parleras d'un lieu, tu auras les accesseurs qu'il faut (tant qu'ils sont partagés), et quand tu parleras d'une ville ou d'un pays, tu auras aussi tes accesseurs classiques.

Pour tout problème, tu pourras utiliser le mot clé STI dans tes recherches Google, tu trouveras des solutions bien plus précises.

Enfin, ce n'est pas forcément le plus propre, mais c'est ce que tu veux représenter dans ton appli donc...

Bon code !


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
C'est pas une simple STI !
Auteur: 
bobbus1111
Date: 
Mar, 30/06/2009 - 20:34

Merci de ta réponse mais mon but n'est pas de regrouper VILLES et PAYS dans une STI. Le raison principale est qu'il y a beaucoup de lieux possibles, ces lieux ont des listes de paramètres très différentes et donc une STI multiplierai les champs inutiles !


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Désolé, ça y ressemblait
Auteur: 
jasperiel
Date: 
Mer, 01/07/2009 - 11:31

Ah bon ? Pourtant je ne vois que "tel" et "adresse mairie" qui changent.

En tout cas, tu peux toujours t'inspirer de la technique, en faisant ou bien un champ "type" ou bien deux champs "ville_id" et "pays_id" : la plupart du temps un seul serait renseigné, mais tu pourrais même lister ville et pays et ainsi simplifier d'éventuelles recherches.

Tout ça pour dire : STI ce n'est pas "sale", si c'est ce qui est voulu, n'hésite pas à le faire.
Certains n'hésiteraient même pas une seconde à faire un champ "lieu" qui contiendrait du JSON ou de l'XML, mais c'est pour les fous d'optimisation BDD et lorsque tu n'as pas de requête à faire sur le contenu du JSON.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Qui est en ligne
Il y a actuellement 1 utilisateur et 20 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Propulsé par Drupal ]