2015-04-01 106 views
2

我有以下两种模式:ActiveRecord的存在子查询

class Client < ActiveRecord::Base 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :client 
end 

我想在同一时间查询与在列表中规定的订单(订单_1,订单_2),客户,需要客户的所有订单 。我可以通过下面的SQL做到这一点:

SELECT * 
FROM CLIENTS C 
JOIN ORDERS O 
ON C.ID = O.CLIENT_ID 
WHERE EXISTS 
    (SELECT * 
    FROM CLIENTS C1 
    JOIN ORDERS O1 
    ON C1.ID = O1.CLIENT_ID 
    WHERE O1.ID IN ('order_1', 'order_2') 
    AND C1.ID = C.ID 
); 

有没有办法在轨的方式来做到这一点?下面的代码会给出满意的客户端,但client.orders只返回指定的订单。

clients.includes(:orders).where(orders: { id: ['order_1', 'order_2'] }) 

我不知道如何获得一个查询中的所有信息。

回答

0

我知道这是几年后,但这里是如何做到这一点(根据this blog post)。

Order.where(client_id: 
    Client.joins(:orders) 
    .where(orders: {id: ['order_1', 'order_2']}) 
    .select(:id) 
)