0

我有以下 Ruby 代码,它设置了一个表单来选择一个文件:

    <%= 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' 

但我不知道如何在控制器中调用从表单中选择的文件。

有任何想法吗?

4

3 回答 3

0

文件数据将在 中params[:import][:import],而不是在实际文件中。文件上传后,就没有像“c:/...”这样的东西了。

如果需要,打开一个新文件,并将该数据写入其中。

或者使用像carrierwave这样的东西来为你做这件事,并在保存后获取文件的实际路径。

于 2012-10-01T01:25:18.253 回答
0

使用以下插件之一来处理文件上传。

attachement_fupaperclip

这是关于回形针的 railscast 教程http://railscasts.com/episodes/134-paperclip,这是附件 fu 教程http://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu

于 2012-10-01T19:07:34.727 回答
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

结尾

于 2012-10-01T18:52:30.263 回答