Il est bien connu que la méthode d'entrée des données dans la base de données Rails consiste à créer un fichier yaml pour les appareils et à le saisir avec la commande rails. Cependant, en réalité, il semble que les données d'origine soient souvent préparées dans Excel etc. et traitées en CSV etc. J'ai également essayé le convertisseur yaml, etc. mais cela n'a pas fonctionné pour mettre la clé des appareils, alors je l'ai fait moi-même. Je n'ai pas du tout traité le caractère d'échappement, donc si les données d'origine gèrent une telle chose, veuillez le traiter de manière appropriée.
Par exemple, supposons que vous ayez un fichier CSV comme celui-ci avec le nom de la colonne sur la première ligne.
id,item,price
1, pomme, 100
2, mikan, 80 ans
3, banane, 60
4, Melon, 2000
5, fraise, 300
Vous aurez besoin d'un tel fichier yaml pour gérer les fixtures.
data1:
id: 1
article: pomme
price: 100
data2:
id: 2
article: Mikan
price: 80
data3:
id: 3
article: banane
price: 60
data4:
id: 4
article: Melon
price: 2000
data5:
id: 5
article: Fraise
price: 300
La place de data1:
est la clé fixtures, qui n'est pas reflétée dans la base de données, mais il semble que vous deviez donner une valeur unique comme hachage pour chaque enregistrement.
Le script ressemble à ceci. Après la conversion d'Excel en CSV, j'ai une nomenclature en UTF-8, j'ai donc une option lors de l'ouverture du fichier.
!/use/bin/env ruby
filename = ARGV[0]
# Option pour effacer la nomenclature UTF-8
file = open(filename, 'r:BOM|UTF-8')
# Obtenez la première ligne du fichier CSV
column = file.gets.chomp.split(",")
# préfixe de la touche fixtures (data) suivi du compteur (num)
prefix = "data"
num = 1
str = ""
file.each do |line|
sauf si line.strip == "" ## Ignorer les lignes vides
str += "#{prefix}#{num}:\n"
(0 .. column.length - 1).each do |i|
str += " #{column[i]}: #{line.chomp.split(",")[i]}\n"
end
str += "\n"
num += 1
end
end
print str
Cela ressemble à ceci lors de l'exécution de Shell.
$ ./csv2yaml.rb fruits.csv > fruits.yml
Il n'y a pas eu de problème pour convertir des données CSV d'environ 500 lignes, et cela semble correct car elles ont été importées par des appareils. J'ai pu convertir plusieurs fichiers CSV avec différentes colonnes.
Cela peut être plus facile à faire si vous utilisez la bibliothèque yaml.