سؤال

أحاول استخدام 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