2017-06-12 11 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

だ1

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}) 
関連する問題