1

这似乎是一个非常小的错误,但我找不到任何解决此问题的方法。我正在尝试在我的 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:NilClass 的未定义方法'nil')。我最好的猜测是我使用这种方法是错误的,但是我的下一个问题是如何解析 Csv 数据?我想从我的视图中检索文件,然后将数据解析到数据库中。我怎样才能打开相同的文件?上述方法不正确吗?快速说明一下,我尝试使用“FasterCSV”gem,但得到了“使用标准 FasterCsv 1.9.2 gem”。我不得不从 fastcsv 更改为标准 csv,因为部署到 heroku 的 gem 出现了问题。

忘了给视图文件,

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

这是基本的。我得到的错误是关于 parse 方法的。我确实查看了文档,发现我应该使用一个字符串。但我认为'params [:file]'给了我这个。抱歉,我对 Rails 比较陌生..

4

2 回答 2

3

您的代码可能如下所示:

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

  CSV.parse(infile) do |row|

  end
end
于 2012-05-01T22:36:22.787 回答
0

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

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

于 2012-05-01T17:48:17.243 回答