Lire un fichier CSV récupéré depuis un formulaire
20 juillet 2007, 10:05
Voilà je suis en stage chez Dexem pour qui je développe Pagecreator (outil de création de Services Vocaux Interactifs en VXML). En ce moment je travaille sur une version dans laquelle on veut pouvoir importer un fichier CSV depuis un formulaire. Voici donc comment le faire avec Ruby on Rails.
Pour récupérer un fichier depuis un formulaire, il suffit de deux choses, une déclaration du formulaire adéquate et le champ qui va permettre de récupérer le fichier:
<%= start_form_tag({:action => 'import_csv', :id => my_object}, :multipart => true) %>
<label for="csv_file">File to Upload</label>
<%= file_field_tag "csv_file" %>
<%= end_form_tag %>
Ensuite dans l’action import_csv de votre controller, pour parser le fichier CSV et l’importer vers la base de données, il suffit de faire:
def import_csv
begin
CSV::Reader.parse(params[:csv_file]).each do |row|
unless row[0].nil? or row[1].nil?
MyObject.create(:name => row[0], :value => row[1])
end
end
rescue
flash[:error] = "There was an error parsing your CSV file"
end
end
Capturer les exceptions à l’aide d’un bloc begin rescue permet d’afficher un message d’erreur à l’utilisateur si le fichier est mal formaté, et voilà le tour est joué :)
mots-clés: csv, rails, ruby, ruby on rails



