Mongoid Use Objectid as Created At
date = “Nov” slug = “Nov/mongoid-use-objectid-as-created-at”
One great feature of Mongodb is, that the first bytes of each ObjectID contains the time, they were generated.
This can be exploited to mimic the well known
created_at field in rails.
First put this file in your lib directory.
#lib/mongoid/created.rb module Mongoid module CreatedAt # Returns the creation time calculated from ObjectID # # @return [ Date ] the creation time def created_at id.generation_time end # Set generation time of ObjectId. # Note: This will modify the ObjectId and # is therefor only useful for not persisted documents # # @return [ BSON::ObjectId ] the generated object id def created_at=(date) self.id = BSON::ObjectId.from_time(date) end end end
If you are still using mongoid 3 replace
Now you can include this module in every Model, where you need created at.
#app/models/user.rb class User include Mongoid::Document include Mongoid::CreatedAt # ... end u = User.new(created_at: 1.hour.ago) u.created_at
That’s all easy enough, isn’t it?