如何全局覆盖 Mongoid::Document._id 生成

How to globally override Mongoid::Document._id generation

我想覆盖 mongoid 中的 _id 生成类型(另一个共享数据库的应用程序使用 String 而不是 ObjectId()

我可以通过添加以下内容为每个模型执行此操作:

    field :_id, type: String, default: -> { BSON::ObjectId.new.to_s }

但是如何全局附加它以保持干燥?

非常有效的用例,但是 looking into the code 你可能在 Mongoid::Fields 时运气不佳,但你可以覆盖 mongoize 应该像这样

Item.new.id
 => BSON::ObjectId('56e727892ada693ea8000000')

class BSON::ObjectId
  def self.mongoize(k)
    k.to_s
  end
end

Item.new.id
 => "56e7276f2ada693737000002"