2011-06-21 3 views
3

Je travaille sur une application ruby ​​/ rails soutenue par Mongodb (en utilisant Mongoid). Dans le contexte de l'application Rails, tout fonctionne parfaitement, mais nous accédons également à des objets en dehors de l'environnement Rails, où je n'arrive pas à obtenir l'ID d'un objet sous forme de hash au formatAccès juste la valeur de BSON :: ObjectId dans ruby ​​

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

J'ai compris que je vois parce que je récupère une valeur qui n'est pas simplement une chaîne d'id mais plutôt du type BSON :: ObjectId. En plus d'exiger l'environnement des rails, j'ai aussi essayé exigeant BSON explicitement dans le fichier qui est fait ce travail:

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

je dois obtenir la valeur simplement comme une chaîne contenant l'identifiant, ce qui semble être la valeur par défaut partout ailleurs, mais dans ce cas. Bizarrement, ce comportement ne se produit que dans mon environnement de développement (les autres membres de mon équipe n'ont pas ce problème).

Mention légale que je suis nouveau chez Mongodb, il pourrait manquer quelque chose de vraiment évident.

Merci!

Répondre

4

Vous pouvez essayer d'appeler to_s sur l'objet. En 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" 

Si cela ne fonctionne pas, pouvez-vous poster votre environment.rb?

+0

Appel à to_s dessus totalement travaillé. MERCI! –

+0

Juste pour ma propre édification: pourrait-il être que l'objet est converti automatiquement dans l'environnement Rails par Mongoid, mais en l'absence de Mongoid nous devons faire la conversion explicitement? –

+0

Je pensais qu'en exigeant l'environnement.rb. donc vous auriez Rails, et donc Mongoid, disponible dans votre programme. N'oubliez pas que vous pouvez également utiliser l'interpolation Ruby String pour obtenir gratuitement l'appel de la méthode to_s. – dogenpunk

Questions connexes