2017-06-12 101 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})