2009-03-03 16 views
9

Nos mantenemos advertencias que ven como la siguiente cuando nos encontramos nuestras especificaciones:Rubí objeto # advertencias Identificación y Registro Activo

Objeto # id quedará obsoleta; use Object # object_id

El código en cuestión es acceder al ID de un modelo ActiveRecord (que es un atributo en la tabla, obviamente, en lugar del ID de instancia de objeto en la VM Ruby).

¿Alguien sabe cómo desactivar estas advertencias en particular o de alguna manera evitarlas?

+0

Si esto es en una prueba, ¿estás seguro de que estás accediendo a un verdadero activo entidad de registro, y no un objeto de rubí regular? –

+0

Ah ... estos objetos bien pueden ser objeto de burla –

+0

Debe responder la pregunta, porque eso lo solucionó por completo. –

Respuesta

6

Estoy asumiendo que estás haciendo burla/stubbing (porque usted ha mencionado especificaciones).

En mi caso, me encuentro con estas advertencias cuando corto un objeto ActiveRecord y accedo a su atributo ID.

En los casos en que se pueden esperar para acceder a la identificación de su objeto ActiveRecord, te recomiendo que hagas lo siguiente:

mock("MyActiveRecordObject", :id => 1001) 
10

Cuando un objeto es descendiente de ActiveRecord::Base, una llamada a id va a AR :: método de id B en lugar de la obsoleta en Object.

Esa advertencia por lo general significa que uno de mis objetos no es lo que creo que es.

+0

Ojalá pudiera aceptar dos respuestas correctas ... –

2

La advertencia object # id solo ocurre en las clases regulares de ruby ​​como NilClass. ActiveRecord :: Base anula el objeto # id

4

Su objeto no es realmente un objeto AR, generalmente indica que ha fallado la recuperación de algunos datos (Table.find_by_name('nonexistent name') devolverá nil). Si todo lo que quiere hacer es cerrar las advertencias visibles, puede desactivar whiny_nils en su configuración; de lo contrario, realice una prueba is_a? antes de intentar acceder a los atributos del objeto y manejar correctamente el caso de falla.

15

Intente utilizar [:id] en lugar de .id

+0

¿Por qué esta respuesta fue desestimada? es correcto. – ttvd

+0

porque había un usuario que estaba siendo malicioso y rechazaba todo. –

+0

estoy votando esto ... – bragboy

Cuestiones relacionadas