Konvertieren hash-Schlüssel in Kleinbuchstaben um — Ruby-Anfänger
Meine Tabelle Feldnamen sind klein-und die Feldnamen, die ich von CSV-Dateien sind camelcase. Gibt es trotzdem kann ich umwandeln des keys in einem array von hashes in Kleinbuchstaben?
Hier ist der code habe ich jetzt:
CSV.foreach(file, :headers => true) do |row|
Users.create!(row.to_hash)
end
Diese versagt, weil die Tasten sind camel-case (ich habe überprüft dies durch manuelles Bearbeiten der Datei um den header-Zeile alle klein geschrieben).
PS. Auch würde ich gerne wissen, warum die Hölle Schienen nimmt die Tabelle Feldnamen " groß-und Kleinschreibung ins Spiel, um mit zu beginnen?
InformationsquelleAutor Hopstream | 2011-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie so verwenden:
Hatte ich keine Zeit es zu testen aber aus, nehmen Sie die Vorstellung.
Hoffe, es wird helfen,
Entschuldigen Sie mich, aber ich weiß nicht unserstand was meinst du den Spruch: die Schienen nimmt die Tabelle Feldnamen " groß-und Kleinschreibung ins Spiel, um mit zu beginnen? 🙂 (Vielleicht ist das meine schlechten Englisch-Kenntnissen 🙂 )
Bedeutung warum Schienen erfordern bei Feldnamen in der Tabelle übereinstimmen, die Schlüssel in der hash, der beim einführen
Warum wäre es nicht? Deine DB ist (wahrscheinlich) groß-und Kleinschreibung, und Schienen nur geht die Namen durch.
InformationsquelleAutor bor1s
Können Sie einfach die header_converters option CSV:
Wichtig, die .versuchen es seit einer leeren Kopfzeile wird eine exception werfen. Viel besser (und schneller) als das zu tun dieses auf jeder Zeile.
InformationsquelleAutor dalison
Da war getaggt mit Schienen.
Mit ActiveSupport Start vom version 3.0 können Sie eine
HashWithIndifferentAccess
.Ermöglichen lower/uppercase/symbol schreiben, um Zugriff auf die Schlüssel oder Ihr Hash.
ActiveSupport 4.0.2 eingeführt:
with_indifferent_access
unterstützt die string-oder-symbol, aber ist nicht groß-und Kleinschreibung für mich. ActiveSupport 5.0.4.Gleich als Justin Maxwell hier. Ich habe eine alternative, statt.
InformationsquelleAutor neongrau
Ruby 1.9 bietet ein ganz schöner Weg, dies zu erreichen, verwenden each_with_object zu vermeiden, initialisieren einer temporären Variablen.
InformationsquelleAutor qnm
Ich finde dieses Vorgehen mehr elegante:
InformationsquelleAutor Cuisine Hacker
Ich würde hinzufügen, der hash direkt, effizienter als merge! da bist du nicht die Schaffung eines neuen hash für jedes paar.
InformationsquelleAutor Travis Reeder
Fand ich, dass diese Lösung ist deutlich schneller und ein bisschen mehr "Rubyish".
InformationsquelleAutor rantler
Können Sie einfach tun
ändern hash-Schlüssel in Kleinbuchstaben, oder Sie können auch zu verwandeln hash-Werte in Kleinbuchstaben oder Großbuchstaben, wie pro Ihre Anforderung.
hash.transform_values(&:downcase)
oderhash.transform_values(&:upcase)
InformationsquelleAutor Touseef Murtaza