在mongo ruby​​驱动程序中使用DBRef :(未定义的方法`bson_type'对于#mongo :: dbref:0x0056466ed55e48>)

时间:2015-12-23 05:38:35

标签: ruby-on-rails ruby mongodb mongodb-ruby

当我尝试在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行是指代码段中的倒数第二行。

1 个答案:

答案 0 :(得分:1)

Ruby Mongo驱动程序(我使用的是v2.2.0)没有在bson_type类上定义Mongo::DBRef方法。通过将数据库引用指定为扩展JSON(link),我能够解决此特定限制。将您的grant_document哈希定义为:

grant_document = { :target => { "$ref" => "user", "$id" => user_mongo.first["_id"] }, :role => ... }