Question

J'essaie d'utiliser Mongomapper dans mon application Sinatra pour un site d'enchères simples, mais j'ai du mal à exécuter une question simple et d'obtenir des résultats.

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

Mais je n'obtiens aucune sortie avec @auction.inspect dans le navigateur. Cependant, quand j'utilise la requête @auction = @query.all Je reçois tous les enregistrements dans ma base de données.

Params (lors de l'utilisation de l'URL localhost / enchères / 3):

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

query.all production:

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

La solution

Mongomapper (ou plus précisément, Plucky, la bibliothèque qui construit des requêtes Mongomapper) jette un champ appelé id à _id Automatiquement pour la parité avec ActiveRecord, vous ne pouvez donc pas utiliser deux champs différents appelés _id et id. Vous verrez cela si vous regardez la requête générée dans vos journaux.

Dans ce cas, vous souhaitez utiliser un nom de champ différent.

Autres conseils

.where construit l'association, mais vous devrez appeler une méthode comme all ou first Pour effectuer la requête et obtenir des résultats:

@auction = @query.where({:id => params["id"].to_i}).first
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top