2012-10-01 26 views
0

我有以下Ruby代碼它設置了一個表格,選擇一個文件:如何訪問通過Ruby on Rails中的表單選擇的文件?

<%= form_for :import, :url=>{:controller=>"products", :action=>"import"}, :html => { :multipart => true } do |f| %> 
     <div class= "field"> 
      <%= f.file_field :import %> 
      <%= submit_tag 'Import' %> 
     </div> 

在控制器中,我試圖調用從本地驅動器選擇的文件。此行適用於特定文件:

book = Spreadsheet.open 'c:/source.xls' 

但我不知道如何調用控制器中從窗體中選擇的文件。

任何想法?

回答

0

文件數據將在params[:import][:import]中,而不是實際的文件中。一旦文件上傳完成,就沒有任何內容像「c:/ ...」。

如果需要,請打開一個新文件,並在其中寫入數據。

或者使用像carrierwave這樣的東西爲你做,並獲得一旦保存的文件的實際路徑。

+0

我不知道你是如何得到任何的「http://」從文件上傳。 – rewritten

+0

感謝您的幫助。我會檢查一下carrierwave。 – devrwj

+0

謝謝@saverio。我能夠應用載波,現在它工作正常。 – devrwj

0

這裏是現在工作的代碼:

高清導入

require 'spreadsheet' 
Spreadsheet.client_encoding = 'UTF-8' 
import_file = params[ :import ][ :import ] 
file = FileUploader.new 
file.store!(import_file) 
book = Spreadsheet.open "#{file.store_path}" 
sheet1 = book.worksheet 0 
sheet1.each 1 do |row| 
@product = Product.new(:code => row[0], :name => row[1], :status => row[2], :account => current_user.account).save 

相關問題