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

时间:2016-03-14 20:19:31

标签: ruby-on-rails ruby mongodb mongoid

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

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

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

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

1 个答案:

答案 0 :(得分:0)

非常有效的用例,但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"