2013-01-06 20 views
13

我正在學習Rails的過程,並試圖創建一個文件上傳頁面來處理CSV數據,而無需使用我的數據庫或模型。我也試圖避免使用任何寶石,如回形針或載波。在Rails中上傳CSV文件並在頁面上顯示進程記錄而不保存文件?

我已經取得了一些進展,但由於某種原因,我的代碼無法正常工作。我沒有看到在CSV文件中顯示的記錄顯示在import.html.erb page.

當我點擊我的頁面上的上傳按鈕:localhost:3000/upload時,它會在提交後正確重定向到預期頁面,但是不顯示文件中的行。

有沒有人有線索爲什麼頁面不顯示CSV文件中的記錄?

上傳文件視圖(index.html.erb):

<%= form_tag({:action => :import}, multipart: true) do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag("Import") %> 
<% end %> 

控制器(upload_controller.rb):

class UploadController < ApplicationController 
    def index 
    end 

    def import 
    rowarray = Array.new 
    myfile = params[:file] 

    CSV.foreach(myfile.path) do |row| 
     rowarray << row 
     @rowarraydisp = rowarray 
    end 
    end 
end 

結果視圖(import.html.erb):

<% @rowarraydisp.each do |row| %> 
    <%= row %> 
<% end %> 
<h1>File has been uploaded. Check</h1> 

回答

9
CSV.foreach(myfile.path) do |row| 
    rowarray << row 
    @rowarraydisp = rowarray 
end 

應該寫成:

@rowarraydisp = CSV.read(myfile.path) 

%的文檔CSV.read

使用啜一個CSV文件導入一個數組的數組。

您的import.html.erb文件被使用兩次,用於ERB的兩個不同示例。什麼是實際的文件和實際的代碼?

<% @rowarraydisp.each do |row| %> 
    <%= row %> 
<% end %> 

將嘗試從CSV文件到瀏覽器發送一個子陣列row,但是,沒有一個想法是什麼ERB或數據是很難說什麼的輸出會比的內容等數據行。

+0

謝謝。這就是打印到import.html頁面的內容! [「firstcol」,「secondcol」] [「1」,「2」] [「3」,「4」] [「5」,「6」] 文件已上傳。檢查 –