Bonjour, Il y a sans doute quelque chose que je ne comprends pas dans le fonctionnement du :include. J'ai 3 modeles User, Role, Building Au niveau de user j'ai une relation has_many buildings, :through => roles Dans mon conroleur je fais @buildings = user.buildings(:include => [:roles]) et dans ma vue j'ai une boucle sur @buildings avec l'affichage des roles Mais quand je regarde les traces, je vois que j'ai une requete pour chaque role ce qui me donne l'impression que le :include ne fonctionne pas. Votre avis?
on 2009-07-01 11:34
on 2009-07-01 13:46
> Mais quand je regarde les traces, je vois que j'ai une requete pour > chaque role ce qui me donne l'impression que le :include ne fonctionne > pas. > > Votre avis? Ca ne marche pas comme ça, tu dois dans ce cas écrire ta requête complète, donc ça serait un truc du genre (à la pluralization près): User.find(..., :include => {:role => :buildings}, ...)
on 2009-07-01 22:39
> Dommage car du coup on n'utilise la puissance des relations
Rails ne fait pas non plus le café Oo ? Quel scandale!!!
Ecris tes named_scope et t'auras un truc similaire à ce que tu veux
faire:
@buildings = user.include_roles.include_buildings.
Le souci avec Rails c'est qu'on devient très paresseux hein ;-)
on 2009-07-01 22:51
C'est pas tant une question de paresse que de logique. Si je défini des relations mais que je ne peux pas m'en servir c'est un peu embêtant car globalement dans un grand nombre de cas, tu vas chercher les éléments de la relation pour les afficher et dans ce cas ta relation has_many, ne te sers plus à rien (ou je n'ai pas compris)
on 2009-07-01 23:07
Tu peux également mettre le :include par défaut dans la définition de ta relation (mais ce n'est peut-être pas ce que tu veux faire). 2009/7/1 Tranquiliste <nicolas.aguttes@googlemail.com>
on 2009-07-02 23:02
Emilien Taque wrote: > Tu peux également mettre le :include par défaut dans la définition de ta > relation (mais ce n'est peut-être pas ce que tu veux faire). En pratique je trouve ça pas pratique du tout, à moins qu'on puisse le rendre optionnel? S'il veut juste sa liste de user et qu'il n'a pas besoin du reste, et bien Rails va quand même faire les jointures qui peuvent devenir coûteuses.
on 2009-07-03 20:35
La solution toute bête est user.buildings.find(:all, :include => :roles) J'utilise la relation et le include
on 2009-07-03 23:47
Et pour économiser quelques caractères : user.buildings.all(:include => :roles) 2009/7/3 Tranquiliste <nicolas.aguttes@googlemail.com>
on 2009-07-04 13:50
Tranquiliste wrote: > La solution toute b�te est > user.buildings.find(:all, :include => :roles) Ouaip en fait c'est possible. Je l'ai découvers tout à l'heure en faisant: user.buildings.find(3) Sous le capot ça doit être du named_scope.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.