質問

SinatraアプリでMongomapperを使用してシンプルなオークションサイトを使用しようとしていますが、簡単なクエリを実行して結果を得るのに苦労しています。

before '/auction/:id' do
    connection = Mongo::MongoClient.new
    db = connection.db('auction')
    collection = db['auctions']

    @query = Plucky::Query.new(collection)
end

get '/auction/:id' do
    @auction = @query.where({:id => params["id"].to_i})
    "#{@auction.inspect}"
end

しかし、私は出力を得ません @auction.inspect ブラウザで。ただし、クエリを使用する場合 @auction = @query.all データベース内のすべてのレコードを取得します。

Params(url localhost/auction/3を使用する場合):

{"splat"=>[], "captures"=>["3"], "id"=>"3"}

query.all 出力:

[{"_id"=>BSON::ObjectId('529cbbee21f7f10dd4000005'), "id"=>2, "name"=>"jump", "price"=>1.42}, {"_id"=>BSON::ObjectId('529cbbf821f7f10dd400000e'), "id"=>3, "name"=>"here", "price"=>93.34}]
役に立ちましたか?

解決

mongomapper(より正確には、mongomapperクエリを構築するライブラリ)は、呼ばれるフィールドをキャストします id_id ActivereCordとの平等のために自動的にあるため、呼び出される2つの異なるフィールドを使用することはできません _idid. 。ログの生成されたクエリを見ると、それがわかります。

この場合、別のフィールド名を使用する必要があります。

他のヒント

.where 協会を構築しますが、次のような方法を呼び出す必要があります all また first クエリを実行して結果を取得するには:

@auction = @query.where({:id => params["id"].to_i}).first
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top