2010-08-13 4 views
1

Possible Duplicate:
Rails primary key and object idPourquoi obtenir l'erreur: L'ID de l'objet sera obsolète; Objet # utilisation OBJECT_ID

Sur mon environnement rails de développement local, je suis en mesure de vérifier la sortie d'un appel SOAP très bien.

Je peux utiliser response.id pour obtenir la valeur de ce paquet affiché en utilisant la méthode .inspect:

#<SOAP::Mapping::Object:0x15702d0c0604 {}id="dd26ce5f-0cfd-9bbb-3485-4c64c9d6378 
4" {}error=#<SOAP::Mapping::Object:0x15702d0bf6f0 {}number="0" {}name="No Error" 
{}description="No Error">> 

Cependant, quand je le pousse à Heroku, je reçois cette erreur:

/disk1/home/slugs/212074_6b040a6_5c2e/mnt/app/controllers/sugarcrm_controller.rb 
:77: warning: Object#id will be deprecated; use Object#object_id 

Me rendre fou de comprendre la différence.

Suggestions?

+0

Avez-vous vérifié tous vos gemmes nécessaires sont disponibles? – nathanvda

+0

Comment je fais ça? Je ne reçois aucune erreur concernant les gemmes ... il y a quelques instructions require dans la gemme qui fait tout le matériel SOAP se connectant à l'API SugarCRM ... mais j'ai supposé que c'étaient des bibliothèques existantes? – Angela

+0

dupplicate de http://stackoverflow.com/questions/2173811/rails-primary-key-and-object-id –

Répondre

0

Je crois que vous pouvez avoir un bug dans votre code, c'est pourquoi cet avertissement est lancé. Object#id est le plus souvent invoqué lorsque vous appelez par inadvertance id sur un objet que vous ne vous attendiez pas, comme nil:

>> nil.id 
(irb):1: warning: Object#id will be deprecated; use Object#object_id 
=> 4 

Si l'objet a une méthode id, un avertissement est pas jeté. Donc, en supposant que cela fonctionne localement (et que cet objet SOAP ait une méthode id), la seule façon dont vous devriez recevoir cet avertissement est s'il s'agit d'un type d'objet différent. Par conséquent, êtes-vous absolument certain que l'objet que vous attendiez est renvoyé?

Essayez d'ajouter:

logger.info ">>> SOAP OBJECT: " + object.inspect 

Ou ajouter une manipulation erreur explicite/vérification d'objet:

unless object.is_a?(SOAP::Mapping::Object) 
    raise ArgumentError, "did not get SOAP object" 
end 

Au moins, vous saurez quelque chose a mal tourné.

1

Vous êtes probablement habitué aux objets basés sur ActiveRecord et cet objet ne semble pas basé sur ActiveRecord. id est soon to be deprecated et object_id est une méthode sur un objet Ruby.

Cela ne signifie pas que id sur ActiveRecord va être obsolète, seulement sur "les anciens objets Ruby".

+2

Parce que j'écris comme je parle. Je suis un hideux américain. –

Questions connexes