Предупреждения Ruby Object # id и Active Record

Когда мы запускаем наши спецификации, мы продолжаем видеть такие предупреждения:

Идентификатор объекта № будет устаревшим; использовать Object # object_id

Рассматриваемый код обращается к идентификатору модели ActiveRecord (который, очевидно, является атрибутом в таблице, а не идентификатором экземпляра объекта в виртуальной машине Ruby).

Кто-нибудь знает, как отключить эти конкретные предупреждения или как-то их избежать?


person Toby Hede    schedule 03.03.2009    source источник
comment
Если это тест, вы уверены, что получаете доступ к реальному активному объекту записи, а не к обычному объекту ruby?   -  person Denis Hennessy    schedule 04.03.2009
comment
Ах ... это вполне могут быть издевательства над объектами   -  person Toby Hede    schedule 04.03.2009
comment
Вы должны ответить на вопрос, потому что это полностью решило его.   -  person Toby Hede    schedule 04.03.2009


Ответы (5)


Я предполагаю, что вы делаете насмешку / заглушку (потому что вы упомянули спецификации).

В моем случае я сталкиваюсь с этими предупреждениями, когда закрываю объект ActiveRecord и получаю доступ к его атрибуту ID.

В случаях, когда вы ожидаете получить доступ к идентификатору вашего объекта ActiveRecord, я бы рекомендовал вам сделать следующее:

 mock("MyActiveRecordObject", :id => 1001)
person ucron    schedule 05.03.2009

Попробуйте использовать [:id] вместо .id

person Ryan Bigg    schedule 04.03.2009
comment
Потому что был злонамеренный пользователь, который голосовал против всего моего. - person Ryan Bigg; 02.12.2009

Когда объект наследуется от ActiveRecord::Base, вызов id переходит к id методу AR :: B, а не к устаревшему методу Object.

Это предупреждение обычно означает, что один из моих объектов не тот, что я думаю.

person Sarah Mei    schedule 04.03.2009

Ваш объект на самом деле не является объектом AR, что обычно указывает на сбой при извлечении некоторых данных (Table.find_by_name('nonexistent name') вернет nil). Если все, что вы хотите сделать, это отключить видимые предупреждения, вы можете выключить whiny_nils в своей конфигурации, в противном случае выполните is_a? тест, прежде чем пытаться получить доступ к атрибутам объекта и аккуратно обработать случай сбоя.

person womble    schedule 04.03.2009

Предупреждение object # id появляется только в обычных рубиновых классах, таких как NilClass. ActiveRecord :: Base переопределяет идентификатор объекта

person epochwolf    schedule 04.03.2009