2011-06-21 27 views
3

我正在研究由Mongodb(使用Mongoid)支持的ruby/rails應用程序。在Rails應用程序的上下文中,所有工作都完美無瑕,但我們也在訪問Rails環境之外的對象,在這種環境下,我無法獲得對象的id,只能以格式中的散列形式返回:訪問ruby中的BSON :: ObjectId的值

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

我已經知道我看到了,因爲我得到的值不僅僅是一個id字符串,而是BSON :: ObjectId類型。除了需要Rails環境我也試過在做這項工作的文件中要求BSON明確:

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

我需要簡單地獲得價值爲包含的ID,這似乎是默認的字符串在其他地方,但在這種情況下。奇怪的是,這種行爲只發生在我的開發環境中(我團隊中的其他人沒有這個問題)。

必要的免責聲明,我是新來的Mongodb所以可能會錯過一些真正明顯的東西。

謝謝!

回答

4

你可以嘗試在對象上調用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嗎?

+0

對它調用to_s完全工作。謝謝! –

+0

僅供我自己的啓發:可能是由於Mongoid在Rails環境中自動轉換對象,但是在沒有Mongoid的情況下,我們必須明確地進行轉換? –

+0

我認爲通過要求environment.rb。所以你可以在你的程序中使用Rails,因此可以使用Mongoid。不要忘記,你也可以使用Ruby字符串插值來免費調用to_s方法。 – dogenpunk