Le 23 févr. 2011 à 13:57, Philippe Guégan a écrit : > Merci Martin :)
Bonjour Philippe, > J'en suis arrivé à la même conclusion que toi, jusqu'à ce que je tombe > sur ce ticket Lighthouse : > https://rails.lighthouseapp.com/projects/8994/tickets/5552-relation-fails-to-act-like-an-array-on-intersection > > Suite à cela, un patch a été créé sur ActiveRecord : > https://github.com/rails/rails/blob/master/activerecord/lib/active_record/relation/spawn_methods.rb#L5 > > Apparemment, l'intersection d'un Array avec une relation ActiveRecord > est gérée. Donc je ne comprends toujours pas pourquoi on ne peux pas > faire d'intersection. Effectivement l'intersection entre un Array et ActiveRecord::Relation est gérée. Mais elle ne va pas faire ce que tu veux dans ce cas. Ici c'est ActiveRecord::Relation qui va être transformé en Array, via un to_a. Résultat tu vas te retrouver entrain de faire l'intersection entre des transfers et des accounts, ce qui ne te renverra rien. > Je débute en Rails et en Ruby. La lecture des sources est loin d'être > évidente pour moi pour l'instant. Peut-être que je ne suis pas sur la > bonne piste, ou peut-être que j'idéalise trop Ruby et Rails, et que ce > genre d'abstraction / polymorphisme (intersecter des ensembles de > types différents) n'est tout simplement pas possible. N'empêche, je > trouverai ça plutôt dommage... Pour un débutant tu as déjà la bonne démarche d'aller voir le tracker et les sources. Là techniquement Rails ne peut pas deviner ce que tu veux, à partir du moment ou les résultats sont chargés, il ne peut pas transformer un tableau en relation, il fait donc l'inverse. Il y a quand même une solution qui consiste à lui expliciter que tu ne veux pas les résultats pour accounts, mais la relation. Dans ce cas ton code ressemblera à: transfers = Transfer.joins(:source) & accounts.scoped C'est vrai que c'est déroutant car les where, joins etc… te renvoie une relation alors que l'association elle te renvoie directement les résultats. Martin Catty || fuse http://www.noremember.org http://www.synbioz.com -- 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]
