在 mongo ruby 驱动程序中使用 DBRef:(#<Mongo::DBRef:0x0056466ed55e48> 的未定义方法 `bson_type')
Using DBRef in mongo ruby driver: (undefined method `bson_type' for #<Mongo::DBRef:0x0056466ed55e48>)
当我尝试在 mongo ruby 驱动程序中使用 DBRef 时(创建一个新的 DBRef 对象并包含在我插入到集合中的文档中),我得到这个错误,我不能正面反面:
NoMethodError (undefined method `bson_type' for #<Mongo::DBRef:0x0056466ed55e48>):
app/controllers/payment_notifications_controller.rb:43:in `block in create'
app/controllers/payment_notifications_controller.rb:19:in `create'
这里是有问题的代码:
user_mongo = Urgent::Application.config.mongo_client[:user].find(uuid: order.identity.uuid)
if user_mongo
grant_document = { :target => Mongo::DBRef.new("user", user_mongo.first["_id"]), :role => order_item.expirable.backend_id, :created => Time.now, :store_item_id => order_item.id, :store_order_id => order.id }
if expires
grant_document[:expires] = expires
end
Urgent::Application.config.mongo_client[:grant].insert_one(grant_document)
end
第 39 行是指代码片段中的倒数第二行。
Ruby Mongo 驱动程序(我使用的是 v2.2.0)没有在 Mongo::DBRef
class 上定义 bson_type
方法。我能够通过将数据库引用指定为扩展 JSON (link) 来解决此特定限制。将您的 grant_document
哈希定义为:
grant_document = { :target => { "$ref" => "user", "$id" => user_mongo.first["_id"] }, :role => ... }
当我尝试在 mongo ruby 驱动程序中使用 DBRef 时(创建一个新的 DBRef 对象并包含在我插入到集合中的文档中),我得到这个错误,我不能正面反面:
NoMethodError (undefined method `bson_type' for #<Mongo::DBRef:0x0056466ed55e48>):
app/controllers/payment_notifications_controller.rb:43:in `block in create'
app/controllers/payment_notifications_controller.rb:19:in `create'
这里是有问题的代码:
user_mongo = Urgent::Application.config.mongo_client[:user].find(uuid: order.identity.uuid)
if user_mongo
grant_document = { :target => Mongo::DBRef.new("user", user_mongo.first["_id"]), :role => order_item.expirable.backend_id, :created => Time.now, :store_item_id => order_item.id, :store_order_id => order.id }
if expires
grant_document[:expires] = expires
end
Urgent::Application.config.mongo_client[:grant].insert_one(grant_document)
end
第 39 行是指代码片段中的倒数第二行。
Ruby Mongo 驱动程序(我使用的是 v2.2.0)没有在 Mongo::DBRef
class 上定义 bson_type
方法。我能够通过将数据库引用指定为扩展 JSON (link) 来解决此特定限制。将您的 grant_document
哈希定义为:
grant_document = { :target => { "$ref" => "user", "$id" => user_mongo.first["_id"] }, :role => ... }