Comment déterminer le contenu de la première ligne d'un file csv et excel à l'aide de rails

J'ai une application de rails simple où les users doivent download du contenu via csv ou Excel. Je ne veux pas toujours supposer que l'user connaisse tous les champs requirejs dans la database, je souhaite simplement que les users sachent que la première colonne est requirejse et quel que soit le contenu placé sur la première colonne entre la colonne mobile_number de la database. Mon exemple de code de ce dont je parle est ci-dessous. J'utilise le gemme roo. C'est une application simple, donc seules deux colonnes de database sont utilisées dans la table des contacts.

  def load_imported_contacts spreadsheet = open_spreadsheet header = spreadsheet.row(1) (2..spreadsheet.last_row).map do |i| row = Hash[[header, spreadsheet.row(i)].transpose] contact = Contact.find_by_id(row["id"]) || Contact.new contact.name = "content of the second field(optional)" contact.mobile_number = "content in the first(required and must be the first column)" contact.save! end end def open_spreadsheet case File.extname(file.original_filename) when ".csv" then Csv.new(file.path, nil, :ignore) when ".xls" then Excel.new(file.path, nil, :ignore) when ".xlsx" then Excelx.new(file.path, nil, :ignore) else raise "Unknown file type: #{file.original_filename}" end end 

Après avoir fait des searchs, j'ai finalement résolu mon problème. J'aurais dû faire cela avant de postr cette question. La solution est en dessous

  def load_imported_contacts spreadsheet = open_spreadsheet header = spreadsheet.row(1) (1..spreadsheet.last_row).map do |i| row = Hash[[header, spreadsheet.row(i)].transpose] contact = Contact.find_by_id(row["id"]) || Contact.new contact.mobile_number = spreadsheet.cell(i,'A') contact.name = spreadsheet.cell(i,'B') contact end end