Ruby on rails, чтение и отображение csv-файла не работает?

#ruby-on-rails #ruby #csv #fastercsv

#ruby-on-rails #ruby #csv

Вопрос:

Я реализую в Ruby on Rails, и я просто хочу что-то простое сделать, я просто хочу прочитать файл csv, а затем показать результат в представлении. У меня есть некоторый код, который мне кажется хорошим, но я всегда получаю ошибку: не удается преобразовать временный файл в строку, это мой контроллер:

 def match
file = params[:file]

@original_filename = file.original_filename
tmpfile = Tempfile.new("redmine_project_importer")
if tmpfile
    tmpfile.write(file.read)
    tmpfile.close
    tmpfilename = File.basename(tmpfile.path)
      if !$tmpfiles
        $tmpfiles = Hash.new
      end
      $tmpfiles[tmpfilename] = tmpfile
    else
      flash[:error] = "Cannot save import file."
      return
    end
 session[:importer_tmpfile] = tmpfilename
sample_count = 5
i = 0
@samples = []
FasterCSV.open(file, "r") do |row|       
        @samples[i] = row
        i  = 1
        if i > sample_count
            break
        end
    end
  

и мое мнение просто:

 <% form_tag({:action => 'result'}, {:multipart => true}) do %>
<table>  

<% @samples.each do |sample| %>
  <tr>
     <td>sample</td>    
  </tr>
<% end %>
</table>
  

Кто-нибудь, кто может мне помочь?
Приветствую

Ответ №1:

1) FasterCSV.open() требуется строковое имя файла, и вы передаете ему файловый объект.

2) Это FasterCSV.foreach(filename) если вы хотите перебирать строки. Или FasterCSV.open().each

Но в вашем случае, если у вас есть параметр загруженного файла, вам лучше использовать

 FasterCSV.new(params[:file]).each do |line|
  

et cetera

Комментарии:

1. Я сделал это, у меня больше нет ошибки. Но у меня все еще нет никаких выходных данных. Точно так же, как @samples пуст, как это получилось?

Ответ №2:

Я не работал с FasterCSV, но я думаю, вам следует взглянуть на электронную таблицу — http://spreadsheet.ch /

Вы должны иметь возможность читать csv-файл так же просто, как это:

 book = Spreadsheet.open path_to_file
sheet  = book.worksheet 0
  

Затем вы можете перебирать строки и выполнять любые действия, которые вы хотите:

 sheet.each do |row|
  #code
end