Ошибка запроса MongoDB

Я пытаюсь использовать MongoMapper в своем приложении Sinatra для простого аукциона, но у меня возникают проблемы при выполнении простого запроса и получении каких-либо результатов.

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 Я получаю все записи в своей базе данных.

Параметры (при использовании 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}]

2 ответа

Решение

MongoMapper (точнее, Plucky, библиотека, которая создает запросы MongoMapper) создает поле с именем id в _id автоматически для паритета с ActiveRecord, поэтому вы не можете использовать два разных поля с именем _id а также id, Вы увидите это, если посмотрите на сгенерированный запрос в своих журналах.

В этом случае вы хотите использовать другое имя поля.

.where создает ассоциацию, но вам нужно будет вызвать метод, как all или же first выполнить запрос и получить результаты:

@auction = @query.where({:id => params["id"].to_i}).first
Другие вопросы по тегам