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」ジェムを使用しようとしましたが、「標準の FasterCsv 1.9.2 ジェムを使用してください」というメッセージが表示されました。heroku への gem のデプロイで問題が発生したため、fastercsv から標準の csv に変更する必要がありました。

ビューファイルを渡すのを忘れました、

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

基本です。私が得ているエラーは解析メソッドにあります..ドキュメントを見て、文字列を使用することになっていることがわかりました。しかし、「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 に答える