2009-05-08 5 views
0

J'ai un problème très similaire à celui exposé ici en RubyOnRails Guide.ActiveRecord MySQL et JOINS

Cette requête:

Client.all :joins => :orders, 
      :conditions => { :orders => {:created_at => time_range}} 

doit retourner tous les clients avec leurs commandes si elles ont fait des commandes dans l'intervalle de temps. Ai-je raison? Ce que je veux est légèrement différent: je veux que tous les clients aient fait une commande ou non dans la plage de temps. S'ils ont fait quelques commandes, je les veux bien. Je suis venu avec ce que:

Client.all :joins => 'LEFT OUTER JOIN orders ON orders.client_id = clients.id', 
      :conditions => {:orders => {:created_at => time_range}}) 

Mais cela ne me donne pas les clients qui ne faisaient pas un ordre ... Quelqu'un peut-il aider?

Répondre

1

Je pense que cela va le faire:

Client.all :joins => 'LEFT OUTER JOIN orders ON orders.client_id = clients.id', 
     :conditions => ['orders.created_at IN (?) OR orders.id IS NULL', time_range] 
+0

Mais n'est pas que la tricherie ... laissez-moi essayer?. –

+0

Cela a fonctionné;) Thx ... –

+0

Je ne sais pas comment faire des conditions OR dans AR sans plugin ou écrire la requête à la main. Peut-être que j'ai raté quelque chose en cours de route. –