Merci Martin :) 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. 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... Philippe On 23 fév, 11:38, Martin Catty <[email protected]> wrote: > Le 23 févr. 2011 à 10:32, Philippe Guégan a écrit : > > > Bonjour à tous, > > Bonjour, > > > > > J'ai une question qui concerne le requêtage avec Arel, et plus > > précisément sur la façon dont fonctionnent les intersections. > > > Prenons la modélisation suivante : un client (customer) possède > > plusieurs comptes bancaires (accounts), et il est possible de réaliser > > des virements (transfers) entre des comptes du même client. Un > > virement est alors constitué d'un compte source et d'un compte cible. > > > Si je veux obtenir tous les virements d'un client donné, je peux > > écrire la requête suivante dans la classe Customer : > > > transfers = Transfer.joins(:source) & Account.where(:customer_id => > > id) > > > Aucun problème, ça marche impeccable. Cependant, dans ma quête sans > > fin de plus de concision, je me dis que, au niveau de l'objet > > Customer, "Account.where(:customer_id => id)" et "accounts" > > représentent exactement la même chose : les comptes du client. Je > > pourrais donc écrire plus simplement : > > > transfers = Transfer.joins(:source) & accounts > > > Mais là, aucun résultat (sans provoquer d'erreur cependant). > > > L'un d'entre-vous aurait une explication à me donner ? Est-ce que je > > suis pas en train de me mélanger les pinceaux entre les prédicats Arel > > et les associations ActiveRecord ? Si oui, pourquoi n'y a-t-il pas > > d'erreur à l'exécution ? > > Le problème vient du type d'objet que tu utilises. > > La première fois tu fais une intersection entre deux objets de type > ActiveRecord::Relation, tandis que la seconde tu fais une intersection > entre ActiveRecord::Relation et Array. > > Martin Catty || fusehttp://www.noremember.orghttp://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]
