Pregunta

Estoy tratando de usar Mongomapper en mi aplicación Sinatra para un sitio de subastas simple, pero tengo problemas para ejecutar una consulta simple y obtener cualquier resultado.

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

Pero no obtengo salida con @auction.inspect en el navegador. Sin embargo, cuando uso la consulta @auction = @query.all Obtengo todos los registros dentro de mi base de datos.

Parámetros (cuando se usa URL localhost/subasta/3):

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

query.all producción:

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

Solución

Mongomapper (o más exactamente, valiente, la biblioteca que construye consultas de Mongomapper) lanza un campo llamado id a _id automáticamente para la paridad con Activerecord, por lo que no puedes usar dos campos diferentes llamados _id y id. Verá que si observa la consulta generada en sus registros.

En este caso, desea usar un nombre de campo diferente.

Otros consejos

.where construye la asociación, pero deberá llamar a un método como all o first Para realizar la consulta y obtener resultados:

@auction = @query.where({:id => params["id"].to_i}).first
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top