当我们运行我们的规范时,我们不断看到如下警告:
Object#id 将被弃用;使用对象#object_id
有问题的代码正在访问 ActiveRecord 模型的 id(显然,这是表上的一个属性,而不是 Ruby VM 中的对象实例 ID)。
有谁知道如何关闭这些特定警告或以某种方式避免它们?
当我们运行我们的规范时,我们不断看到如下警告:
Object#id 将被弃用;使用对象#object_id
有问题的代码正在访问 ActiveRecord 模型的 id(显然,这是表上的一个属性,而不是 Ruby VM 中的对象实例 ID)。
有谁知道如何关闭这些特定警告或以某种方式避免它们?
尝试使用[:id]
而不是.id
当一个对象从 继承时ActiveRecord::Base
,对 AR::B 的调用将id
转到 AR::B 的id
方法,而不是在 上不推荐使用的方法Object
。
该警告通常意味着我的一个对象不是我认为的那样。
我假设您正在模拟/存根(因为您提到了规格)。
就我而言,当我存根 ActiveRecord 对象并访问其 ID 属性时,我遇到了这些警告。
如果您希望访问 ActiveRecord 对象的 ID,我建议您执行以下操作:
mock("MyActiveRecordObject", :id => 1001)
您的对象实际上不是 AR 对象,通常表示某些数据检索失败(Table.find_by_name('nonexistent name')
将返回nil
)。如果您只想关闭可见的警告,则可以whiny_nils
在配置中关闭,否则is_a?
在尝试访问对象的属性并优雅地处理故障情况之前进行测试。
object#id 警告仅发生在 NilClass 等常规 ruby 类上。ActiveRecord::Base 覆盖 object#id