mongoid найти против где - PullRequest
       3

mongoid найти против где

11 голосов
/ 20 апреля 2011

У меня, похоже, возникает эта проблема только с 1 конкретной моделью, когда я ищу по идентификатору

>> 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.

. Странно то, что с другими моделями я могу использовать find просто отлично.Есть идеи?

Остальная часть стека ...

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

1 Ответ

3 голосов
/ 20 апреля 2011

Обычно проблема в другом. С ошибкой и поиском.

Это вызвано тем, что не приведение идентификатора в BSON :: ObjectId перед запросом.

Обычно вы должны это сделать

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

Это наводит меня на мысль, что ваши идентификаторы хранятся в виде строк, а не BSON: ObjectId, и объясняет, почему не удается найти (он ищет BSON :: ObjectId, а не строку)

Может также объяснить, почему это только одна модель, поскольку она полностью зависит от того, как хранятся объекты.

Надеюсь, это поможет

...