Ошибка запроса 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