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]

Répondre à