2011-04-20 51 views
11

我似乎只具有1-4特定型號這個問題,當我通過IDmongoid找到VS其中

>> Cart.where(:_id => '4dae5902e1607c232c000009').first 
=> #<Cart _id: 4dae5902e1607c232c000009, _id: BSON::ObjectId('4dae5902e1607c232c000009'), _type: nil> 
>> Cart.find('4dae5902e1607c232c000009') 
Mongoid::Errors::DocumentNotFound: Document not found for class Cart with id(s) 4dae5902e1607c232c000009. 

搜索奇怪的是,與其他模型,我可以用找到就好了。有任何想法嗎?

堆棧的其餘部分...

from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:192:in `execute_or_raise' 
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:190:in `tap' 
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:190:in `execute_or_raise' 
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:106:in `find' 
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/finders.rb:67:in `find' 
from (irb):37 

回答

3

通常情況下,問題是周圍的其他方式。隨着失敗和找到工作。

這是由於在查詢之前不會將id強制轉換爲BSON :: ObjectId。

通常你會做這個

Cart.where(:_id => BSON::ObjectId('4dae5902e1607c232c000009')).first 

這使我相信,你的ID存儲爲字符串,而不是BSON:物件,並會解釋爲什麼發現失敗(這是尋找一個BSON :: ObjectId不是字符串)

也可以解釋爲什麼它只是一個模型,因爲它完全取決於對象的存儲方式。

希望可以幫到