Ruby - "kann nicht konvertieren Symbol in Integer", wenn Sie versuchen, Zugriff auf Daten im array
Hier ist ein Beispiel-array:
{"C1"=>[
{:upc=>"51857195821952", :product_id=>"1234", :name=>"name", :price=>" $15 ", :color=>"green", :size=>"L", :description=>"descr"},
{:upc=>"352353wegs", :product_id=>"456", :name=>"name2", :price=>"$21", :color=>"black", :size=>"S", :description=>"descr"}, # ...
],
#...
}
Und hier, wie ich bin versucht zu Holen von Daten aus diesem array:
@array.each do |p|
product = Product.new
product.sku = p[0]
product.name = p[1][0][:name] #can't convert Symbol into Integer
price = p[1].select{ |pr| !pr[:price].nil? and pr[:price] != "0" }.min_by{ |i| i[:price].to_f }[:price]
product.price = "%.2f" % (price.to_f)
...
end
Jedes mal, wenn ich versuchen zum abrufen von Daten aus dem array, ich bekomme auf der Linie product.name =
den Fehler kann nicht konvertieren Symbol in Integer.
Was ist falsch in diesem Fall? Ich verbrachte einen Teil des nachmittags auf dieses Thema, aber leider habe ich noch nicht herausfinden, es...
Danke
Habe meine Antwort helfen @user984621 ?
InformationsquelleAutor user984621 | 2013-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
@array
ist eigentlich ein hash. Es ist aufgebaut wie folgt:Da, es ist ein Hash, können Sie 2 Argumente in der
each
(Werke fürmap
auch) - Methode (eine für den Schlüssel, die andere für den Wert):private method 'select' called for "\"":String
Sie können es mit
data[:price]
aber das liefert ein string wie " 15$ ", haben Sie zustrip
es undgsub
das '$' vor der Umwandlung in einen FloatInformationsquelleAutor MrYoshiji
Das grundlegende problem ist, dass die Probe array Sie oben zeigte, ist nicht eigentlich ein array. Es ist ein hash mit key-value-Paare. Damit Ihr code wie
p[0]
oderp[1][0]
ist nicht sinnvoll, weil ein hash nichtindex
wie array. Hash ist nicht bestellt. Hashes Werte zugegriffen, die mit einem "Schlüssel" eher als ein "index", wie array.Durchlaufen Schlüssel-Wert-Paare eines hash wird etwas getan wie diese.
InformationsquelleAutor Jason Kim
Sieht es aus wie Sie kann verwirrend sein, Arrays und Hashes ein bisschen.
Gegeben:
Dann
@array.class.name
istHash
Sie können die tatsächliche array von auf es wie so:
Dann
@actual_array.class.name
wirdArray
So, unter diesem Ansatz und re-schreiben:
Wenn Sie dies tun, werden Sie feststellen, dass der Wert der
:name
element gedruckt wird ordentlich aus.InformationsquelleAutor Kevin Bedell