Pregunta

Seguimos viendo advertencias como las siguientes cuando ejecutamos nuestras especificaciones:

  

El ID del objeto estará en desuso; use Object # object_id

El código en cuestión está accediendo al ID de un modelo ActiveRecord (que es un atributo en la tabla, obviamente, en lugar del ID de instancia del objeto en la máquina virtual Ruby).

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

¿Fue útil?

Solución

Supongo que estás haciendo burla / aplastamiento (porque mencionaste las especificaciones).

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

En los casos en los que espera acceder al ID de su objeto ActiveRecord, le recomiendo que haga lo siguiente:

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

Otros consejos

Intente usar [: id] en lugar de .id

Cuando un objeto desciende de ActiveRecord :: Base , una llamada a id va al método de AR :: B id en lugar de al desaprobado en el Object .

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

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

La advertencia de id. de objeto solo ocurre en clases regulares de ruby ??como NilClass. ActiveRecord :: Base anula el ID del objeto #

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top