Доступ только к значению BSON :: ObjectId в ruby - PullRequest
3 голосов
/ 21 июня 2011

Я работаю над приложением ruby ​​/ rails, поддерживаемым Mongodb (используя Mongoid).В контексте приложения Rails все работает безупречно, но мы также обращаемся к объектам вне среды Rails, где у меня возникают проблемы с получением идентификатора объекта, который будет возвращен как что угодно, кроме хэша в формате:

{"$oid"=>"4e0005b78ba4db213500001f"}

Я понял, что вижу, потому что я возвращаю значение, которое не просто строка идентификатора, а скорее типа BSON :: ObjectId.В дополнение к требованию среды rails, я также пытался явно указать bson в файле, который выполняет эту работу:

require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require "bson"

Мне нужно получить значение просто в виде строки, содержащей идентификатор, который выглядит так:по умолчанию везде, но в этом случае.Как ни странно, такое поведение происходит только в моей среде разработчиков (у остальных парней в моей команде нет этой проблемы).

Требуется отказ от ответственности, что я новичок в Mongodb, поэтому мог упустить что-то действительно очевидное.1009 *

Спасибо!

1 Ответ

5 голосов
/ 22 июня 2011

Вы можете попробовать вызвать to_s для объекта.В irb:

ruby-1.9.2-p180 > p = Project.last #=> #<Project _id: 4e00e77d399a46759d000002, _type: nil, version: 1, created_at: 2011-06-21 18:48:34 UTC, updated_at: 2011-06-21 18:48:34 UTC, name: "Testing MongoDB", client_id: 3, client_name: nil, group_id: 35, requestor_id: 14, requestor_name: "Test Client User", requestor_phone: "", creator_id: 2, creator_name: "Some Guy", manager_id: 23, manager_name: "Some Other Guy", manager_phone: "", manager_email: "", active: true, status: "open", default_hourly_cost: "0.0", default_hourly_charge: "0.0", default_material_markup: "0.35", add_email_internal: "", add_email_client: "", client_po_number: "", client_ticket_number: "", date_requested: nil, date_requested(1i): "2011", date_requested(2i): "6", date_requested(3i): "21">
ruby-1.9.2-p180 > p.id.to_s #=> "4e00e77d399a46759d000002"

Если это не сработает, вы можете опубликовать свой environment.rb?

...