为什么会收到错误:Object#id将被弃用;使用Object#object_id

时间:2010-08-13 04:38:39

标签: ruby-on-rails ruby soap object heroku

  

可能重复:
  Rails primary key and object id

在我的本地开发rails环境中,我能够很好地检查SOAP调用的输出。

我可以使用response.id从.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">>

但是,当我把它推到heroku时,我收到了这个错误:

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

让我疯狂地理解这种差异。

建议?

2 个答案:

答案 0 :(得分:1)

您可能习惯使用基于ActiveRecord的对象,并且此对象看起来不像是基于ActiveRecord。 idsoon to be deprecatedobject_id是Ruby对象上的方法。

这并不意味着ActiveRecord上的id将被弃用,只是在“普通的旧Ruby对象”上。

答案 1 :(得分:0)

我相信你的代码中可能有一个错误,这就是抛出警告的原因。当您无意中对{I}期望的对象调用Object#id时,通常会调用id:{/ 1}}

nil

如果对象具有>> nil.id (irb):1: warning: Object#id will be deprecated; use Object#object_id => 4 方法,则不会抛出警告。因此,假设它在本地工作(并且此SOAP对象确实具有id方法),您应该获得此警告的唯一方法是它是否是另一种对象。

因此,您是否完全确定您所期望的对象是否被退回?尝试添加:

id

或者添加一些明确的错误处理/对象检查:

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

至少你会知道出了什么问题。