我有以下Ruby代码,其中包含一个用于选择文件的表单:
<%= form_for :import, :url=>{:controller=>"user", :action=>"upload"}, :html => { :multipart => true } do |f| %>
<div class= "field">
<%= f.file_field :import %>
<%= submit_tag 'Import' %>
</div>
在我的控制器内部,我试图调用用户从本地磁盘中选择的文件 当我给它提供文件时,下面的代码可以工作:
book = Spreadsheet.open 'c:/myexcel.xls'
但我不知道如何在控制器内部调用从表单中选择的文件 请帮忙
答案 0 :(得分:2)
可以使用 CarrierWave 执行此操作,请参阅railscast here。
下面是从Excel电子表格导入数据的代码:
def upload
require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'
file_to_import = params[ :import ][ :import ]
file = FileUploader.new
file.store!(file_to_import)
book = Spreadsheet.open "#{file.store_path}"
sheet = book.worksheet 0
sheet.each 1 do |row|
@user = User.new(:code => row[0], :name => row[1], :status => row[2], :account => current_user.account).save
end
或者,对于上传文件和检索文件,您可以使用'回形针'gem(railscast here)。
这是一个相当古老但它是一个受人尊敬的宝石,得到了很好的支持并且没有太大变化。
希望有所帮助