2015-04-01 101 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) 
)