Вопрос

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

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

Решение

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

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

Другие советы

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

@auction = @query.where({:id => params["id"].to_i}).first
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top