Convertir les clés de hachage de minuscules Rubis Débutant
Ma table, les noms de champ sont minuscules et les noms de champ-je obtenir à partir de fichiers CSV sont camelcase. Est-il de toute façon je peux convertir les clés d'un tableau de hachages de minuscules?
Voici le code que j'ai droit:
CSV.foreach(file, :headers => true) do |row|
Users.create!(row.to_hash)
end
C'est un échec parce que les touches sont chameau cas (j'ai vérifié cela en éditant manuellement le fichier afin de le rendre à la ligne d'en-tête tout en minuscules).
PS. Aussi j'aimerais savoir pourquoi l'enfer rails s'table des noms de champ' cas de la sensibilité dans le jeu pour commencer?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser quelque chose comme ceci:
J'ai pas eu le temps de le tester, mais, vous pouvez prendre l'idée de celui-ci.
J'espère que ça aidera
Vous pouvez simplement utiliser le header_converters option CSV:
Important de mettre l' .essayez là depuis un en-tête vide, une exception sera levée. Beaucoup mieux (et plus rapide) que de le faire sur chaque ligne.
Depuis cet été marqués avec des Rails.
Avec ActiveSupport de départ vom version 3.0, vous pouvez utiliser un
HashWithIndifferentAccess
.Qui permettent d'abaisser les majuscules/symbole de l'écriture de l'accès aux clés ou votre Hash.
ActiveSupport 4.0.2 également introduit cette:
with_indifferent_access
soutient chaîne-ou-symbole, mais est ce n'est pas insensible à la casse pour moi. ActiveSupport 5.0.4.Vous pouvez très simplement faire
pour modifier les clés de hachage minuscules, ou vous pouvez également transformer les valeurs de hachage en minuscules ou en majuscules selon votre condition.
hash.transform_values(&:downcase)
ouhash.transform_values(&:upcase)
Ruby 1.9 offre une jolie façon de le réaliser, à l'aide de each_with_object pour éviter l'initialisation d'une variable temporaire.
Je trouve cette approche plus élégante:
Je voudrais ajouter le hachage directement, plus efficace que la fusion! parce que vous n'êtes pas créer une nouvelle table de hachage pour chaque paire.
J'ai trouvé que cette solution est nettement plus rapide et un peu plus "Rubyish".