Question

Nous continuons de voir les avertissements suivants lorsque nous exécutons nos spécifications:

  

Object # id sera obsolète; utiliser Object # object_id

Le code en question accède à l'id d'un modèle ActiveRecord (qui est un attribut de la table, bien entendu, plutôt que l'ID d'instance d'objet de la machine virtuelle Ruby).

Quelqu'un sait-il comment désactiver ces avertissements particuliers ou comment les éviter?

Était-ce utile?

La solution

Je suppose que vous vous moquez de vous-même (vous avez mentionné des spécifications).

Dans mon cas, je rencontre ces avertissements lorsque je stub un objet ActiveRecord et que j'accède à son attribut ID.

Si vous envisagez d'accéder à l'ID de votre objet ActiveRecord, nous vous recommandons de procéder comme suit:

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

Autres conseils

Essayez d'utiliser [: id] au lieu de .id

Lorsqu'un objet est issu de ActiveRecord :: Base , un appel à id est dirigé vers la méthode id de AR :: B plutôt que le obsolète sur Object .

Cet avertissement signifie généralement que l’un de mes objets n’est pas ce que je pense.

Votre objet n'est pas réellement un objet AR, ce qui indique généralement que la récupération de certaines données a échoué ( Table.nom_index_de_bien ('nom inexistant') renverra nil ). Si vous souhaitez uniquement éteindre les avertissements visibles, vous pouvez désactiver whiny_nils dans votre configuration. Sinon, effectuez un test is_a? avant d'essayer d'accéder aux attributs de l'objet et gérer le cas d'échec avec élégance.

L'avertissement object # id ne se produit que sur des classes ruby ??classiques telles que NilClass. ActiveRecord :: Base annule l'objet # id

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top