2011-10-26 34 views
0

我在Ruby on Rails中實現,我只想做一些簡單的事情,我只想讀取一個csv文件,然後在視圖中顯示輸出。我有一些代碼,這似乎對我好,但我總是得到errror:不能將它視爲檔案轉換成String 這是我的控制器: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> 

有人能幫助我嗎? 格爾茨

回答

0

我還沒有FasterCSV工作,但我覺得你應該給電子表格一看 - http://spreadsheet.ch/

你應該能夠簡單地讀取一個CSV文件,因爲這:

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

然後,您可以遍歷行並執行任何您想要的操作:

sheet.each do |row| 
    #code 
end 
1

1)FasterCSV.open()需要一個字符串f ilename,並且你傳遞一個File對象給它。

2)如果你想迭代行,它是FasterCSV.foreach(filename)。或FasterCSV.open().each

但在你的情況,如果你有一個上傳的文件參數,你就要去更好

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

等等

+0

我做這個,我沒有錯誤了。但我仍然沒有任何輸出。就像@samples是空的一樣,這是怎麼回事? – Ruben