【问题标题】:Rails and Importing CSV issue?Rails 和导入 CSV 问题?
【发布时间】:2012-05-01 16:30:48
【问题描述】:

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

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 比较陌生。。

【问题讨论】:

  • 我最好的选择是您的应用程序没有收到您正在上传的文件。可以分享一下你的查看代码吗?
  • 错误信息会告诉你导致错误发生的文件和行号。如果您可以分享,它将更容易提出解决方案。

标签: ruby-on-rails csv


【解决方案1】:

您的代码可能如下所示:

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

  CSV.parse(infile) do |row|

  end
end

【讨论】:

  • 这很完美。谢谢 tommasop.. 但现在我有另一个问题,这次是关于保存 csv 数据。我正在使用此代码存储数据 Event.new(:Ename => row[0], :Edate => row[1], :Elocation => row[2], :Edesc => row[3] , :Oname => row[4], :Oemail => row[5], :Odetail => row[6]) 日志显示这已通过。但是我的数据库不存储数据。你知道为什么吗?
  • 我检查了 heroku 日志,它们没有显示任何问题。它在控制器事件后显示 Completed 200 状态。它显示的唯一问题是缓存:[POST/events/import] 无效,通过。任何想法这意味着什么?非常感谢
  • NM 明白了!我认为 .new 可以保存。但它有效..再次感谢
【解决方案2】:

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

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

【讨论】:

  • 文件不需要持久化到文件系统上,直接处理即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 2014-10-17
  • 2011-09-08
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多