On 5/26/07, Jean-François <[EMAIL PROTECTED]> wrote:
> Cyril :
>
> > CREATE TABLE acteur_film_role {
> > id INTEGER,
> > acteur_id INTEGER,
> > film_id INTEGER,
> > role_id INTEGER
> > }
> >
> > Mais avec Rails, impossible de voir comment le schématiser à
> > part en créant un nouvel objet model qui schématisera cette
> > nouvelle table composé de
> > belongs_to et has_many
>
> Oui et c'est une bonne solution àmha.
>
> class Acteur < AR::B
> has_many :compositions
> has_many :films, :through => :compositions
> has_many :personnages, :through => :compositions
> end
>
> class Film < AR::B
>
> has_many :compositions
> has_many :acteurs, :through => :compositions
> has_many :personnages, :through => :compositions
> end
>
> class Personnage < AR::B
> has_many :compositions
> has_many :acteurs, :through => :compositions
> has_many :films, :through => :compositions
> end
>
> Et le "join model" :
>
> class Composition < AR::B
> belongs_to :acteur
> belongs_to :film
> belongs_to :personnage
>
> validates_uniqueness_of :acteur_id, :scope => [ :film_id, :personnage_id ]
> end
>
> Pour avoir la liste des films d'un acteur : acteur.films.uniq
> tous les personnages qu'il a joués : acteur.personnages.uniq
>
> tous les acteurs qui ont joué James Bond : james_bond.acteurs.uniq
>
> pour créer une composition :
> Composition.create :acteur => acteur, :film => film, :personnage => personnage
> ou
> Composition.create :acteur_id => acteur_id, :film_id => film_id,
> :personnage_id => personnage_id
>
> ou sean_connery.compositions.create(:personnage => james_bond,
> :film => docteur_no)
>
> etc.
>
> donc on peut manipuler dans tous les sens.
>
> > Mais cela m'imposera de créer cette objet à
> > chaque fois pour faire une liaison.
>
> C'est pas la mer à boire.
>
> > Car en effet, le has_and_belongs_to_many, ne me permet
> > de faire la liaison avec une base intermédiaire que de deux
> > champs, pas trois.
>
> L'autre avantage est que tu peux rajouter des champs
> supplémentaire à la table compositions, genre 'doublage_voix'
> pour préciser le rôle (j'ai préféré le terme personnage,
> mais tu fais comme tu veux) par exemple d'Eddy Murphy
> dans Shrek.
Merci beaucoup Jean-François. Très bonne explication. Je comprend tout.
--
Cyril Mougel
--~--~---------~--~----~------------~-------~--~----~
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]
-~----------~----~----~----~------~----~------~--~---