2017-06-12 136 views
0

我想在代碼下面進行優化。因爲這會讓頁面變得很慢。有什麼想法嗎?我試圖刪除迭代代碼,但我感到精神癱瘓。Rails:多個查詢到單個查詢

@cart_items_count_with_purchase = cart_items.select do |item| 
    item.brand_user.sub_orders.where('created_at > ? AND product_id = ?', item.added_to_cart_at, item.product_id). 
          where(order_status: OrderStatus.paid).exists? 
end.count 

這是我解決問題的方法。

cart_items.joins(brand_users: :sub_orders).where(sub_orders: {order_status: OrderStatus.paid}).where('sub_orders.product_id IN (?)', cart_items.pluck(:product_id)) 
+0

能否請您添加模式和關聯?這可能有助於進一步減少查詢 –

+0

另一個有用的信息是DB對這些字段的索引。 –

+0

無關:您的其他問題剛被刪除。請轉到[幫助],花一些時間認真學習如何/在這裏問什麼... – GhostCat

回答

0

這裏有一個降低線

product_ids = cart_items.pluck(:product_id) 

cart_items.joins(brand_users: :sub_orders) 
    .where(sub_orders: {order_status: OrderStatus.paid, product_id: product_ids})