Forum: Rails France Relations multiples entres tables

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Vincenzo R. (Guest)
on 2008-12-08 13:20
Bonjour à tous,

Je vais vous exposer un problème relativement complexe, je suis bloqué
et si quelqu'un pouvait me donner un coup de pouce je ne le remercierais
jamais assez !

Le concept :
-------------
J'ai une série de tables en DB (users, functions, expertizes, ...)

Je souhaites mettre en place un système qui me permette de lier ces
différents objets entre eux de manière très flexible vie une seule
table, en "typant" les liaisons.

Mon idée :
-------------
Créer une table "objectrelations" qui contiendrait les champs suivants :

id
linkfrom_id
linkfrom_type
linkto_id
linkto_type
created_at
updated_at
stopped_at

#1 record de objectrelations :
id : 1
linkfrom_id : 1 # User ID = 1
linkfrom_type : "User"
linkto_id : 1 # Expertize ID = 1
linkto_type : "Expertize"
created_at : now()
updated_at : now()
stopped_at :  NULL

Le problème :
--------------------------
Tout ceci fonctionne bien en DB, ça me permet de créer des liens entre
les différents objets, de remonter divers liens, de mettre fin à un lien
(via la colonne stopped_at) sans supprimer le lien en DB (on garde un
historique) ...

Par contre, je ne vois vraiment pas comment modéliser tout ceci dans
Rails (dans les modèles).

Je penses avoir bien compris que je devrai utiliser le polymorphisme,
les "Through Associations" ou encore "L'héritage de table" mais je n'y
arrive pas.

J'ai regardé du côté de "acts_as_taggable", ils utilisent un système
semblable mais uniquement dans un sens (n'importe quel objet -> des
tags). Malheureusement, ici je dois pouvoir lier n'importe quoi avec
n'importe quoi ...

Est-ce que quelqu'un a une idée pour m'aider ? Comment dois-je m'y
prendre ?

Merci.
Cyril M. (Guest)
on 2008-12-08 13:41
(Received via mailing list)
Vincenzo Ruggiero wrote:
> Je souhaites mettre en place un système qui me permette de lier ces
> linkto_id
> linkto_type : "Expertize"
>
> n'importe quoi ...
>
> Est-ce que quelqu'un a une idée pour m'aider ? Comment dois-je m'y
> prendre ?
>
> Merci.
>
Faire une sorte de méta-programmation. Dans le sens où il faut peut-être
pas utiliser le polymorphisme de rails qui est pour un seul élément.
Mais en générer un pour 2.

ex :

def to
  Eval("#{linkto_type.camelize}.find(#{linkto_id})")
end


def from
  Eval("#{linkfrom_type.camelize}.find(#{linkfrom_id})")
end

Après ce qui est TRES complique est peut-être la mauvaise méthode :)

--
Cyril M.
http://blog.shingara.fr
Michael H. (Guest)
on 2008-12-08 13:46
Problème très intéressant! Peut-être peux-tu aller voir par ici:
http://wiki.rubyonrails.org/rails/pages/ManytoMany...
Vincenzo R. (Guest)
on 2008-12-08 14:21
Michael H. wrote:
> Problème très intéressant! Peut-être peux-tu aller voir par ici:
> http://wiki.rubyonrails.org/rails/pages/ManytoMany...

Ahhhh, ça semble en effet répondre à ma question.

Ils ont d'ailleurs utilisé +/- les mêmes conventions de nommage que moi,
je vais partir vers ça.

Merci beaucoup !
This topic is locked and can not be replied to.