Suppose, that for some reason the built-in BSON::ObjectId-based identifiers are unfit for what you’re trying to do. Perhaps, you’d like them to be uppercase letters, or elements of fibonacci series, or perhaps, in your case you just want to experiment and see what works best. Mongoid will let you easily roll your own ID scheme.
First, you need to tell mongoid about the type of your ID field - the identity class method is used precisely for that purpose.
class Post include Mongoid::Document include Mongoid::Timestamps identity :type => String field :title, :type => String field :body, :type => String end
Next, you’ll need to fiddle with the Mongoid::Identity class. Whenever you create a new object and intend to persist it to the database, a new instance gets created, and a new identifier is generated. All you have to do is redefine the generate_id method, and you’re done.
class Mongoid::Identity Generator = Prime.instance.each def generate_id Generator.next end end