Ruby Object#ID -Warnungen und aktiver Datensatz
-
03-07-2019 - |
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?
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