2009-10-23 51 views
0

我有一個頁面,用戶可以將數據導入網站。無論是複製和粘貼到Excel中的文本區域,還是上傳.csv文件。錯誤回形針/ FasterCSV處理可選csv上傳

控制器檢查csv是否已經上傳 - 如果是的話,它會處理這個,否則它會處理粘貼的內容。 (假設用戶現在只會選擇一個選項)。

複製和粘貼部分作品完美,但是,這個問題時,我嘗試處理上傳的CSV文件出現了:

我得到的錯誤:

can't convert ActionController::UploadedTempfile into String

#events_controller 
    def invite_save 
    @event = Event.find(params[:id]) 

    if params[:guest_list_csv] 
     lines = parse_csv_file(params[:guest_list_csv]) 
    else 
     #csv file uploaded 
     lines = params[:guest_list_paste] 
    end 

    if lines.size > 0 
     lines.each do |line| 
      new_user(line.split) 
     end 
     flash[:notice] = "List processing was successful." 
    else 
     flash[:error] = "List data processing failed." 
    end 

    end 
private 

    def parse_csv_file(path_to_csv) 
    lines = [] 

    require 'fastercsv' 

    FasterCSV.foreach(path_to_csv) do |row| 
     lines << row 
    end 
    lines 
    end 

    def new_user(line) 
    #code to create new user would go here 
    end 

我基本上是試圖以一種平滑的行動上傳和處理CSV,而不是讓用戶按下「進程」按鈕。

+0

你是否也可以顯示視圖和模型文件 – 2010-11-14 07:06:12

回答

2

在線路#6上方

if params[:guest_list_csv] 
    lines = parse_csv_file(params[:guest_list_csv]) 
else 
    #csv file uploaded 
    lines = params[:guest_list_paste] 
end 

問題是params[:guest_list_csv]是不實際的字符串,也不是路徑,因爲它是一個文件對象。你需要的是明確的呼籲#path就可以了。

# line 6 
    lines = parse_csv_file(params[:guest_list_csv].path) 

請試試看看它是否解決了您的問題。