Vincenzo Ruggiero wrote:
> 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.
>   
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 Mougel
http://blog.shingara.fr


--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Répondre à