Si je gère bien le truc, j’ai 4 tables (Album, Artist, Article et Review) et 3 join tables many_to_many (Artist/Album, Artist/Article, Album/Article). Mais je me pose une question. Si je veux afficher toutes les Reviews d’un Artist ? J’utilise une autre join table Artist/Review ?
Prenons un exemple fictif. Je clique sur “Beatles”. J’ai une liste des Albums et Articles. Si une Review existe pour un Album, le titre est cliquable. Donc en gros, le “chemin” c’est : Artist –> Album –> Review.
A priori, j’ai pas besoin d’une table Artist/Review, si ?
Flux RSS
Bonjour,
Concernant la logique pour structurer vos données dans des tables, tout dépend de ce que vous voulez faire :
Si vous souhaitez avoir des review qui sont liées à des albums, alors vous aurez artist > album > review
Vous pourrez alors choisir toutes les reviews d’albums concernant cet artiste.
Vous pouvez aussi décider d’avoir des reviews concernant un album ou un artiste, auquel cas il n’est pas nécessaire de créer une nouvelle table revieuw_artist, il suffira de typer vos review :
la table revieux aura un champ : type qui indiquera si on a une review d’album ou d’artiste.
ou encore deux champs : idartist / idalbum qui selon que l’un ou l’autre sera renseigné indiquera le type de review (j’ai une préférence pour la solution 1).
Il faudrait aussi bien comprendre la différence entre un article et une review ? Si la review est juste un nouvel article quelques années plus tard sur le même album, avec la meme structure, vous pouvez vous passer de la table review, tout sera dans article dans lequel un champ de type vous indiquera si vous avez un article ou une review.
J’espère n’avoir pas été trop confus.
Non :
Artist.find_by_name(”Toto”, :include => {:albums => :reviews})
Devrait te donner les infos que tu veux.
Plus court : il est possible de définir ce que vaut @artist.reviews
class Artist
has_many :albums
has_many :reviews, :thought => :albums
en résumé :
class A
has_many :as
has_many :bs, :though => :as
has_many :zs
A.find(1, :include => [{:as => :bs}, zs])