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 || 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]
