Chercher l'existence d'une relation n-1-1-n


#1

Bonjour,

J’ai des joueurs qui jouent à des jeux (jusque là…).
Ma relation n-n a été transformée en une double relation n-1 et 1-n, via une
entité “inscription”.

J’ai donc :
Joueur
has_many : inscriptions

Jeu
has_many : inscriptions

Inscription
belongs_to :joueur
belongs_to :jeu

Lorsque je dois répondre à la question “tel joueur est-il inscrit à tel jeu”,
je fais un truc style
Inscription.find(:all,:conditions=>“joueur_id=#{joueur.id} and
jeu_id=#{jeu.id}).size==1”

Je voudrais savoir si il y a un moyen plus “RoR”, et moins “SQL” (-;

Merci !

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau 602N


#2

Bonjour

En passant par l’option :through

ce qui va donner par exemple

Jeu
has_many : inscriptions
has_many: Joueurs, :through => inscriptions

Pour plus de détail l’api rails documente plutot bien cette fonction.

Le 03/01/07, Guillaume B.
removed_email_address@domain.invalid
a écrit :


#3

En passant par l’option :through

Merci !!!

Pour plus de détail l’api rails documente plutot bien cette fonction.

J’y cours (-;

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau 602N


#4

Le 3 janv. 07 à 17:34, Guillaume B. a écrit :

Bonjour,

Bonjour,

Inscription
belongs_to :joueur
belongs_to :jeu

Lorsque je dois répondre à la question “tel joueur est-il inscrit à
tel jeu”, je fais un truc style
Inscription.find(:all,:conditions=>“joueur_id=#{joueur.id} and
jeu_id=#{jeu.id}).size==1”

Je dirais sans sql un truc du genre

Joueur
has_many :jeux, :though => :inscriptions

joe = Joueur.find(10)
jeu = Jeu.find(3)

joe.jeux.include?(jeu)

Et avec sql
Joueur
has_many :jeux, :though => :inscriptions do
def include?(jeu)
find(jeu.id) rescue false
end
end

et pareil
joe.jeux.include?(jeu)

pas testé mais à priori ca doit pas être trop loin de marcher

Renaud


#5

pas testé mais à priori ca doit pas être trop loin de marcher

ca marche au poil (((-:

merci !

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau 602N