Im Entwicklungsmodus:
nil.id
=> "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id"
Im Produktionsmodus:
nil.id
=> 4
Warum?
Im Entwicklungsmodus:
nil.id
=> "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id"
Im Produktionsmodus:
nil.id
=> 4
Warum?
Suchen Sie in den Konfigurationen Ihrer Umgebungen nach der Zeile, die Folgendes sagt:
# Fehlermeldungen protokollieren, wenn Sie versehentlich Methoden auf nil aufrufen.
config.whiny_nils = true # oder false in production.rb
Dies dient dazu, zu verhindern, dass Sie in der Entwicklungsphase Methoden auf nil
aufrufen. Wahrscheinlich haben sie es in der Produktion aus Leistungsgründen deaktiviert.
Und nil
ist ein Singleton-Objekt in Ruby, deshalb ist seine id
immer 4, egal was passiert.
Ihre development.rb-Umgebung enthält die folgende Zeile:
config.whiny_nils = true
Das wird einen Fehler protokollieren, wenn Sie versuchen, eine Methode auf nil
aufzurufen. Die id von nil
ist 4, weil es sich um ein Objekt handelt, das zufälligerweise die id 4 hat
Der Code der Methode NilClass#id
hat eine gute Erklärung:
# NilClass#id existiert in Ruby 1.8 (obwohl es veraltet ist). Da +id+ eine grundlegende
# Methode der Active Record-Modelle ist, wird NilClass#id ebenfalls neu definiert, um eine RuntimeError
# auszulösen und den Benutzer zu warnen. Wahrscheinlich wollte sie eine Modell-Datenbankkennung und die 4
# die vom Originalverfahren zurückgegeben wurden, könnten zu obskuren Fehlern führen.
#
# Die Einstellung config.whiny_nils bestimmt, ob diese Funktion aktiviert ist.
# Standardmäßig ist es in den Entwicklungs- und Testmodi aktiviert und in der Produktionsumgebung deaktiviert.
Weinernde nils werden nur im Entwicklungsmodus gemeldet (schauen Sie in Ihre Konfigurationsdateien).
"Weinernde nils" ist der Begriff in Rails, der Warnungen in das Protokoll einfügt, wann immer eine Methode auf einen nil-Wert aufgerufen wird, mit (hoffentlich) hilfreichen Informationen darüber, um welche Art von Objekt es sich handeln könnte, das Sie verwenden wollten.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.