0

私はrablとmongoid3.1.0を使用するシンプルなアプリを持っています。このアクションは次のとおりです。

# index
@products = current_shop.products

rablコードは次のようになります。

# index.json.rabl
collection @products
extends 'api/products/show'

# show.json.rabl
object @product
attributes :id

ヒットすると、ログには@productsに関連する4つのリクエストが表示されます。

MOPED: 127.0.0.1:27017 QUERY        database=bamboo_development collection=products selector={"$query"=>{"shop_id"=>"511c7866fd896b1908000002"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.5682ms)
MOPED: 127.0.0.1:27017 QUERY        database=bamboo_development collection=products selector={"$query"=>{"shop_id"=>"511c7866fd896b1908000002"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (1.1139ms)
MOPED: 127.0.0.1:27017 QUERY        database=bamboo_development collection=products selector={"$query"=>{"shop_id"=>"511c7866fd896b1908000002"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.4492ms)
MOPED: 127.0.0.1:27017 QUERY        database=bamboo_development collection=products selector={"$query"=>{"shop_id"=>"511c7866fd896b1908000002"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.4332ms)

私がこれをするとき:

@products = current_shop.products.search(params[:query])
render text: @products.map(&:name).join(",")

@productsに関連するリクエストは1つだけです。

MOPED: 127.0.0.1:27017 QUERY        database=bamboo_development collection=products selector={"shop_id"=>"511c7866fd896b1908000002"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.4611ms)

複製されたクエリは奇妙に見えますが、なぜそれが起こるのか誰かが知っていますか?私が見ているものとは少し異なるコレクションクエリで、子オブジェクトを呼び出しません。

4

1 に答える 1

0

多くの人が同じ問題を抱えています。ほとんどの場合、rabl 構成の問題が原因です。上記の Aymeric の推奨に従って、次のようにします: @products = current_shop.products.to_a

于 2013-03-04T10:12:33.767 に答える