On 6/2/07, Differenthink [email protected] wrote:
Bon je viens de lire l’explication de Jean-Francois, c’est plutot
claire… je pense avoir compris…
Si je résume en fait, rails est capable de faire des tables de
jointure implicite (sans creer la table en sql) mais que pour deux
foreign key et rien de plus…
Rails n’est pas capable de géré la création de tables. En effet,
ActiveRecord sait lire le contenu d’une base de donnée et ainsi créer
les méthodes adéquates en fonction de la configuration que tu as
donnée à tes classes hérités d’ActiveRecord. Les créations des tables
ne se font à l’heure actuel que par script SQL ou l’utilisation des
scripts de migration (J’ai cru lire sur un blog du planet Rails que
dans le futur des tâches rake de create et de drop de la BDD
existeront)
en revanche si l’on crée la table de jointure nous même (en sql), on
fait ce que l’on veut… et on utilise :through (qui doit être a mon
avis utilisé implicitement qd c est rails qui prend un charge la table
de jointure sans table sql)…
Non ce n’est pas ça. Dans le cas des liaison 1-1 ou 1-N de tes objets,
il faut utiliser les méthodes has_many, belongs_to et has_one et un
champs dans la table correspondant à la clé étrangères dans la table
qu’il faut.
Ensuite l’option though, permet juste de dire quel table fait la
jointure pour la donner de façon explicite si tu n’es pas dans le cas
de la convention. Rails, c’est convention plutôt que configuration. Au
vu de ton exemple suivant tu as compris la logique final. Peut-être
pas les truc qui sont implicite et surtout dans quel cas. J’avoue que
c’est souvent ce qui m’embete avec rails et qui en fait sa magie.
Vu le shéma de la BDD que je compte mettre en place, je sens qu’il va
me falloir une semaine rien que pour ca… 
Imagine avec Hibernate et le mapping en XML 
Le client fait un Achat de Produit. Le Produit est disposé dans une
categorie.id
belongs_to :admin
belong_to :categorie
ca semble correcte ?
Oui ca semble correcte à première vu. Après les test unitaires te
diront si finalement le comportement est bien celui que tu veux. En
Agile programming, on test avant d’implémenter. Ca permet au moins
d’être sur que son test échoue 
Encore une fois merci pour tout…
Beaucoup de communauté opensource servent à ça. Actuellement, j’ai le
temps de répondre. Les prochaines fois ca pourra être toi qui répondra
à des nouveaux 
–
Cyril M.