9

当我们运行我们的规范时,我们不断看到如下警告:

Object#id 将被弃用;使用对象#object_id

有问题的代码正在访问 ActiveRecord 模型的 id(显然,这是表上的一个属性,而不是 Ruby VM 中的对象实例 ID)。

有谁知道如何关闭这些特定警告或以某种方式避免它们?

4

5 回答 5

15

尝试使用[:id]而不是.id

于 2009-03-04T03:27:58.663 回答
10

当一个对象从 继承时ActiveRecord::Base,对 AR::B 的调用将id转到 AR::B 的id方法,而不是在 上不推荐使用的方法Object

该警告通常意味着我的一个对象不是我认为的那样。

于 2009-03-04T00:04:14.237 回答
6

我假设您正在模拟/存根(因为您提到了规格)。

就我而言,当我存根 ActiveRecord 对象并访问其 ID 属性时,我遇到了这些警告。

如果您希望访问 ActiveRecord 对象的 ID,我建议您执行以下操作:

 mock("MyActiveRecordObject", :id => 1001)
于 2009-03-05T09:11:11.903 回答
4

您的对象实际上不是 AR 对象,通常表示某些数据检索失败(Table.find_by_name('nonexistent name')将返回nil)。如果您只想关闭可见的警告,则可以whiny_nils在配置中关闭,否则is_a?在尝试访问对象的属性并优雅地处理故障情况之前进行测试。

于 2009-03-04T01:09:30.477 回答
2

object#id 警告仅发生在 NilClass 等常规 ruby​​ 类上。ActiveRecord::Base 覆盖 object#id

于 2009-03-04T00:13:37.083 回答