我正在尝试在我的Sinatra应用程序中使用MongoMapper进行简单的拍卖网站,但我无法运行简单的查询并获得任何结果。
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}]
答案 0 :(得分:1)
MongoMapper(或者更准确地说,Plucky,构建MongoMapper查询的库)会自动将id
的字段强制转换为_id
以与ActiveRecord进行奇偶校验,因此您不能使用两个名为{的字段_id
{1}}和id
。如果你在日志中查看生成的查询,你会看到。
在这种情况下,您需要使用其他字段名称。
答案 1 :(得分:0)
.where
构建关联,但您需要调用all
或first
之类的方法来执行查询并获得结果:
@auction = @query.where({:id => params["id"].to_i}).first