2016-05-24 3 views
0

Dies sollte ein einfacher sein. Ich habe eine Methode in meinem Modell, das dies tut:Rails, Hash-Fehler beim Zuweisen zur Variablen, aber korrekte Ausgabe beim Abbruch

my_hash.max_by{ |k,v| v}[0] 

Ich versuche, den Schlüssel des Maximalwertes in dem Hash zu erhalten (indem sie sie in ein Array konvertieren). Wenn ich den folgenden bekomme ich meine bestimmt Ergebnisse:

abort my_hash.max_by{ |k,v| v}[0] # Honda (for example) 

Wenn ich das tue, erhalte ich eine nicht definierte Methode `[]‘ für nil: NilClass.

brand = my_hash.max_by{ |k,v| v}[0] 

Was fehlt mir? Irgendwelche Gedanken oder Vermutungen werden geschätzt!

EDIT my_hash { "Honda" => 4, "Toyota" => 2, "Ford" => 1}

Der Code arbeitet, als ich es in meinen Augen direkt habe. Sobald ich es auf das Modell verschiebe und versuche, es einer Variablen zuzuweisen, erhalte ich den obigen Fehler.

+0

Bitte fügen Sie Ihre 'my_hash' –

Antwort

0

Können Sie bitte den Schlüssel, das Wertpaar, das Sie in my_hash verwenden?

Ich habe dies versucht, und es ist für mich arbeiten:

irb(main):008:0> my_hash = {"CA"=>2, "MI"=>1, "NY"=>1} 
=> {"CA"=>2, "MI"=>1, "NY"=>1} 
irb(main):009:0> brand = my_hash.max_by{ |k,v| v}[0] 
=> "CA" 
+0

{" Honda "=> 4," Toyota "=> 2," Ford "=> 1} Der Code funktionierte, wenn ich es direkt aus meiner Sicht habe. Sobald ich es auf das Modell verschiebe und versuche, es einer Variablen zuzuweisen, erhalte ich den obigen Fehler. – Aptorian

+0

@Aptorian Bitte teilen Sie den Code, den Sie in das Modell geschrieben haben, und auch den Wert einer Variablen zu. – Prity

0

Die my_hash variabel sein muss entweder ein leeres Hash {} oder Array [] in Ihrem Modell. Ich denke, dass es der einzige Weg ist, den Sie den Fehler erhalten, den Sie beobachten.

Verwandte Themen