0

私はそのCategoryモデルを持っていhas_many :itemsます。アイテムには、アイテムが削除されたかどうかをチェックするdeleted booleanフィールドがあります。deleted: falseすべてのカテゴリをリストするときに、そのカテゴリのアイテムの数も出力したい

これが私がやっている方法です

@categories = Category.includes(:items).all

削除されていないアイテムの数を印刷するとき、私はやっています

category.items.get_all.count

get_allアイテムモデル内のスコープです

scope :get_all, where(deleted: false)

仕事は順調に進んでいますが、私のウェブサイトの他のページよりもページの読み込み時間が遅いと感じています。このコードを最適化する方法はありますか?

4

1 に答える 1

0

それぞれのクエリを実行するN+1スコープのために、クエリを取得しています。get_allitemscategory

読み込み時間が遅いという問題の実際の解決策は、どのクエリが読み込みを遅くしているのかによって異なります。ヘルプが必要な場合は、サーバー クエリ ログを参照してそれを把握し、投稿してください。

クエリの問題は、次のようにカウント自体N+1を取得することで解決できます。Ruby

 category.items.select{|i| !i.deleted}.count
于 2013-10-01T08:55:06.750 に答える