Frage

Wir sehen immer wieder Warnungen wie die folgenden, wenn wir unsere Spezifikationen durchführen:

Objekt#ID wird veraltet; Verwenden Sie Object#Object_id

Der fragliche Code greift auf die ID eines ActivereCord -Modells auf (was ein Attribut auf der Tabelle offensichtlich und nicht auf die Objektinstanz -ID im Ruby VM ist).

Weiß jemand, wie man diese besonderen Warnungen ausschalten oder sie irgendwie vermeiden kann?

War es hilfreich?

Lösung

Ich gehe davon aus, dass Sie sich verspotteten / stummeln (weil Sie Spezifikationen erwähnt haben).

In meinem Fall stoße ich auf diese Warnungen, wenn ich ein ActivereCord -Objekt stürme und auf das ID -Attribut zugreife.

In Fällen, in denen Sie erwarten, dass Sie auf die ID Ihres ActiveCord -Objekts zugreifen, würde ich empfehlen, Folgendes zu tun:

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

Andere Tipps

Versuchen Sie es zu verwenden [:id] Anstatt von .id

Wenn ein Objekt von abstammt von ActiveRecord::Base, ein Anruf bei id geht zu ar :: b's id Methode eher als das veraltete auf Object.

Diese Warnung bedeutet normalerweise, dass eines meiner Objekte nicht das ist, was ich denke.

Ihr Objekt ist eigentlich kein AR -Objekt, was normalerweise darauf hinweist, dass einige Datenabrufe fehlgeschlagen sind (Table.find_by_name('nonexistent name') wird zurückkehren nil). Wenn Sie nur die sichtbaren Warnungen ausschalten möchten, können Sie sich ausschalten whiny_nils In Ihrer Konfiguration ansonsten eine is_a? Testen Sie, bevor Sie versuchen, auf die Attribute des Objekts zuzugreifen und den Fehlerfall anmutig zu behandeln.

Das Objekt#ID warnt nur in regulären Ruby -Klassen wie Nilclass. ACTIERRECORD :: BASIS OVIDS OBJECT#ID überschreibt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top