すぐに実行される単純なクエリを実行するアクションがありますが、何らかの理由で、count()
要求していないコマンドも実行します。
コントローラーで:
@things = Thing.active.where(city: "New York", state: "New York).limit(10).desc(:qs)
そしてログで:
MOPED: 127.0.0.1:27017 QUERY database=dirot_development collection=things selector={"$query"=>{"status"=>"available", "city"=>"New York", "state"=>"New York"}, "$orderby"=>{"qs"=>-1}} flags=[:slave_ok] limit=10 skip=0 fields=nil (3.8438ms)
MOPED: 127.0.0.1:27017 KILL_CURSORS cursor_ids=[3455573564096875000] (0.0620ms)
MOPED: 127.0.0.1:27017 COMMAND database=dirot_development command={:count=>"things", :query=>{"status"=>"available", "city"=>"New York", "state"=>"New York"}} (378.4430ms)
ログからわかるように、カウントを実行するには378 ミリ秒かかりますが、実際に必要な 10 個のドキュメントを取得するにはわずか 4 ミリ秒しかかかりません。カウントをなくすにはどうすればよいですか?
私は will_paginate を使用していますが、この特定のアクション/ビューでは使用していません。
何か案は?
* UPDATE *
Active は単なる標準スコープです:scope :active, where(status: "available")