当我们运行规范时,我们会一直看到类似下面的警告:
对象#id将被弃用;使用Object#object_id
有问题的代码是访问ActiveRecord模型的id(显然是表中的属性,而不是Ruby VM中的对象实例ID)。
是否有人知道如何关闭这些特定警告或以某种方式避免它们?
答案 0 :(得分:15)
尝试使用[:id]
代替.id
答案 1 :(得分:10)
当某个对象来自ActiveRecord::Base
时,对id
的调用将转到AR :: B的id
方法,而不是Object
上已弃用的方法。
这个警告通常意味着我的一个物体不是我认为的那样。
答案 2 :(得分:6)
我假设你正在做嘲弄/抄袭(因为你提到了规格)。
就我而言,当我存根ActiveRecord对象并访问其ID属性时,我会遇到这些警告。
如果您希望访问ActiveRecord对象的ID,我建议您执行以下操作:
mock("MyActiveRecordObject", :id => 1001)
答案 3 :(得分:4)
您的对象实际上不是AR对象,通常表示某些数据检索失败(Table.find_by_name('nonexistent name')
将返回nil
)。如果您只想关闭可见警告,则可以在配置中关闭whiny_nils
,否则在尝试访问对象的属性并正常处理故障情况之前执行is_a?
测试。 / p>
答案 4 :(得分:2)
对象#id警告只发生在像NilClass这样的常规ruby类上。 ActiveRecord :: Base会覆盖object#id