这似乎是一个非常小的错误,但我找不到任何解决这个问题的方法..我正在尝试在我的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相对较新..
答案 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也正确,您的文件可能不会保留在文件系统上。确保首先保存