Wie erhalte ich eine "undefined Methode '[]' für nil: NilClass" Fehler?

9

Ich bekomme ein verschachteltes Array von facebook via omniauth und möchte prüfen, ob es leer ist? / nil? / existiert? Die abhängige Zeile sieht folgendermaßen aus:

%Vor%

Dies sollte überprüfen, ob dieser Teil des Arrays leer ist oder existiert.

Aber immer wurde dieser Fehler geworfen:

%Vor%

Überprüfe ich Arrays falsch?

Ich habe es mit "has_key" "nil?" "leer?" "existiert?" "leer?"

Aber keiner von diesen funktioniert!

Bitte helfen Sie mir, vielen Dank im Voraus!

    
Jan 16.07.2012, 09:54
quelle

3 Antworten

5

Ein bisschen spät zur Party, aber, wie in diese Antwort gezeigt wurde, Ruby 2.3.0 führte eine neue Methode ein namens dig , die nil zurückgab, wenn eine von Die verketteten Schlüssel sind nil . Ihr Omniauth-Auth-Hash könnte dann wie folgt dargestellt werden:

%Vor%     
Dimitry_N 11.10.2016, 19:35
quelle
13

Dieser Fehler wird ausgelöst, weil einer der Hash-Werte in der Kette von omniauth['extra']['raw_info']['location']['name'].nil? null zurückgibt und es nicht der letzte Aufruf ['name'] ist.

Wenn zum Beispiel omniauth['extra']['raw_info'] Nil zurückgibt, versuchen Sie tatsächlich, nil['location'] aufzurufen, was einen Fehler in Ruby verursacht.

Sie können diesen Fehler einfach abfangen:

%Vor%

Bitte beachten Sie, dass der obige Codeblock die Variable res mit true füllen wird, wenn der Hash-Wert ['name'] null ist oder ein anderer Hash-Wert in der Kette den Wert nil zurückgibt.

    
Erez Rabih 16.07.2012 09:56
quelle
12

Im Idealfall sollten Sie jede verschachtelte Ebene überprüfen, um zu sehen, ob sie nil ist, dies wird jedoch auch funktionieren.

%Vor%

Sie können das NoMethodError auch gezielt retten.

    
d11wtq 16.07.2012 09:59
quelle

Tags und Links