Frage

Ich versuche, Mongomapper in meiner Sinatra -App für eine einfache Auktionsseite zu verwenden, aber ich habe Probleme, eine einfache Abfrage auszuführen und Ergebnisse zu erzielen.

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

Aber ich bekomme keine Ausgabe mit @auction.inspect im Browser. Wenn ich jedoch die Abfrage benutze @auction = @query.all Ich bekomme alle Datensätze in meiner Datenbank.

Parameter (bei Verwendung von URL localhost/Auktion/3):

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

query.all Ausgang:

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

Lösung

Mongomapper (oder genauer gesagt, mutiger, die Bibliothek, die Mongomapper -Abfragen baut) wirft ein Feld auf, das aufgerufen wurde id zu _id automatisch für die Parität mit ActivereCord, sodass Sie nicht zwei verschiedene Felder genannt werden können _id und id. Sie werden das sehen, wenn Sie sich die generierte Abfrage in Ihren Protokollen ansehen.

In diesem Fall möchten Sie einen anderen Feldnamen verwenden.

Andere Tipps

.where baut den Verband auf, aber Sie müssen eine Methode wie so aufrufen all oder first Um die Abfrage auszuführen und Ergebnisse zu erzielen:

@auction = @query.where({:id => params["id"].to_i}).first
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top