我想重写那种_id一代的mongoid(另一个应用程序,这股DB使用的String
代替ObjectId()
如何全局覆盖Mongoid :: Document._id代
我可以通过添加做到这一点对每一个模型这样的:?
field :_id, type: String, default: -> { BSON::ObjectId.new.to_s }
但是,如何在全球范围内将这个附加保持干燥
我想重写那种_id一代的mongoid(另一个应用程序,这股DB使用的String
代替ObjectId()
如何全局覆盖Mongoid :: Document._id代
我可以通过添加做到这一点对每一个模型这样的:?
field :_id, type: String, default: -> { BSON::ObjectId.new.to_s }
但是,如何在全球范围内将这个附加保持干燥
非常有效的用例,但looking into the code你可能已在Mongoid ::场运气的,但是你可以重写mongoize
WH ich应该这样走
Item.new.id
=> BSON::ObjectId('56e727892ada693ea8000000')
class BSON::ObjectId
def self.mongoize(k)
k.to_s
end
end
Item.new.id
=> "56e7276f2ada693737000002"
嗯,似乎正在工作,但'Item.find(params [:id])'不再工作。 '消息: 未找到具有ID(s)56e728dfa54d752083e7435a类的用户的文档。 摘要: 使用id或id数组调用User.find时,每个参数必须与数据库中的文档相匹配,否则将引发此错误。搜索仅供参考:56e728dfa54d752083e7435a ...(总共1件)以及未找到以下ID:56e728dfa54d752083e7435a.' – Jan
您的metor应用程序的年龄?我问,因为相当长一段时间以来,在Metor中有一个选项来存储id本身,而不仅仅是一个字符串:http://docs.meteor.com/#/full/meteor_collection –
这是新的。在你建议更新之后,我创建了一个新的(1.2.1):这里是一个主要的https://gist.github.com/mediatainment/b451b021fbb34e61f3f6 – Jan
你忘了添加你正在使用的mongoid版本。 TBH,我没有看到这一点。你想用这个做什么? –
版本5.1.x.我想将我的'RoR'应用程序连接到'meteor'托管的'mongoDb'。这个'流星应用程序'将mongoDb ObjectId写成一个字符串。如果我不覆盖'mongoid' _id,它将不会获取流星应用程序创建的条目。 – Jan