Domanda

Sto cercando di usare Mongomapper nella mia app Sinatra per un semplice sito di aste, ma ho problemi a eseguire una semplice query e ottenere risultati.

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

Ma non ho alcun output con @auction.inspect Nel browser. Tuttavia, quando uso la query @auction = @query.all Ottengo tutti i record nel mio database.

Parame (quando si utilizza URL LocalHost/Auction/3):

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

query.all produzione:

[{"_id"=>BSON::ObjectId('529cbbee21f7f10dd4000005'), "id"=>2, "name"=>"jump", "price"=>1.42}, {"_id"=>BSON::ObjectId('529cbbf821f7f10dd400000e'), "id"=>3, "name"=>"here", "price"=>93.34}]
È stato utile?

Soluzione

Mongomapper (o più accuratamente, coraggioso, la biblioteca che costruisce domande Mongomapper) lancia un campo chiamato id a _id automaticamente per la parità con ActiveRecord, quindi non è possibile utilizzare due diversi campi chiamati _id e id. Vedrai che se guardi la query generata nei tuoi registri.

In questo caso, vorresti usare un nome di campo diverso.

Altri suggerimenti

.where Costruisce l'associazione, ma dovrai chiamare un metodo come all o first Per eseguire la query e ottenere risultati:

@auction = @query.where({:id => params["id"].to_i}).first
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top