Rails和导入CSV问题?

时间:2012-05-01 16:30:48

标签: ruby-on-rails csv

这似乎是一个非常小的错误,但我找不到任何解决这个问题的方法..我正在尝试在我的rails(3.2)应用程序(ruby 1.9.3)中使用CSV gem并且我收到错误“ NoMethodError”。我的控制器是:

require 'csv'

def import
  file = params[:file] <-- error
  CSV.parse(file, :headers => false) do |row|
      Event.new(:Ename => row[0], :Edate => row[1], :Elocation => row[2], :Edesc => row[3], :Oname => row[4], :Oemail => row[5], :Odetail => row[6])
  end
end

我从用户可以上传csv文件的视图中获取此文件。我得到一个NoMethodError(nil的未定义方法'nil':NilClass)。我最好的猜测是我使用这种方法是错误的,但接下来我的问题是如何解析Csv数据?我想从我的视图中检索文件,然后将数据解析到数据库中。我怎样才能打开相同的文件?以上方法不正确吗? 快速说明,我尝试使用'FasterCSV'宝石,但我得到了“使用标准的FasterCsv 1.9.2 gem”。我不得不从fastercsv更改为标准csv,因为对heroku的gem部署给出了问题。

忘记提供视图文件,

<%= form_tag({:action => :import}, :multipart => true) do %>
<%= file_field_tag 'file' %>
<% end %>

这是基本的。我得到的错误是在解析方法..我看了文档,看到我应该使用一个字符串。但我认为'params [:file]'给了我这个。对不起,我对Rails相对较新..

2 个答案:

答案 0 :(得分:3)

您的代码可能如下所示:

if request.post? && params[:file].present?
  infile = params[:file].read

  CSV.parse(infile) do |row|

  end
end

答案 1 :(得分:0)

CSV.parse要求字符串不是文件http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html,请尝试使用CSV.read

@tommasop也正确,您的文件可能不会保留在文件系统上。确保首先保存