Created
March 20, 2013 15:44
-
-
Save jloosfelt/5205745 to your computer and use it in GitHub Desktop.
Import Csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'csv' | |
# colonnes du fichier | |
keys = [:reference, :name, :trade, :origin, :size, :category, :packaging, :unit, :weight, :price, :employee, :store] | |
count=0 # nombre d'import avec succès | |
i=0 | |
puts "Suppression des anciennes références - #{DateTime.now}" | |
# ici ma classe c'était Item. La transaction permet d'annuler le delete_all en cas de crash. | |
# ça me semble être une bonne idée. | |
Item.transaction do # Item = ma classe | |
Item.delete_all | |
# note : j'utilisais SettingsLogic, le path du fichier est définit dans les Settings. | |
FasterCSV.foreach(Settings.import_products_path, {:col_sep => "\t", :row_sep => "\n"}) do |row| | |
i+=1 | |
hashed_row = row.to_h(keys) # transforme le tableau de valeurs en hash {nom_colonne: value, ...} | |
item = Item.new(hashed_row) | |
# si pays = fr, ajouter le test sur les CEDEX (cp.ends_with?("CEDEX")) | |
if item.save | |
count+=1 | |
else | |
# ici c'était dans le contexte d'une tâche rake, utiliser plutôt le logger? | |
puts "ligne #{i}, erreur : #{item.errors.full_messages}" | |
end | |
end | |
puts "#{count} produits insérés" | |
end | |
# créer lib/array.rb avec ce contenu (pour enrichir la classe Array de 'to_h') | |
class Array | |
def to_h(keys) | |
Hash[*keys.zip(self).flatten] | |
end | |
end | |
# dans application.rb, ajouter | |
require 'array' | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment