'RAILS Mongoid finding document by id

When I do in rails console:

User.first
 => #<User _id: 6241f97de64d1eb2cc003d08,.... 

I get document, but when I try to find it by id like

User.find('6241f97de64d1eb2cc003d08') or User.find(BSON::ObjectId('6241f97de64d1eb2cc003d08')) or User.find('6241f97de64d1eb2cc003d08'.to_bson) etc

I get:

message:                                                                          
  Document(s) not found for class User with id(s) 6241f97de64d1eb2cc003d08.   

also

3.0.3 :049 > User.where(_id: BSON::ObjectId('6241f97de64d1eb2cc003d08')).find
 => nil 

Why it does not work????

I use rails 7 and mongoid



Solution 1:[1]

Finally found the solution.

User model was defined like this:

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  field :_id, type: String
  field :first_name, type: String
  field :last_name, type: String
end

And changing it to this:

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  # field :_id, type: String
  field :first_name, type: String
  field :last_name, type: String
end

Commenting "field: _id" did the trick. I think string type was "covering" expected ObjectId as _id and find methods are converting strings into ObjectId so we ended up in search against string vs ObjectId.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Elrond