Использование DBRef в драйвере mongo ruby: (неопределенный метод `bson_type'для #<Mongo:: DBRef: 0x0056466ed55e48>)

Когда я пытаюсь использовать DBRef в драйвере mongo ruby ​​(создавая новый объект 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 ответ

Решение

Драйвер Ruby Mongo (я использую v2.2.0) не определяет bson_type метод на Mongo::DBRef учебный класс. Я смог обойти это конкретное ограничение, указав ссылку на БД как расширенный JSON ( ссылка). Определите свой grant_document хэш как:

grant_document = { :target => { "$ref" => "user", "$id" => user_mongo.first["_id"] }, :role => ... }
Другие вопросы по тегам