csv ファイルをアップロードして解析し、S3 用のファイルを吐き出すか、表示するだけにしようとしています。file_field_tag を使用して csv をアップロードします。file_field_tag は IO のサブクラスであるオブジェクトを渡し、"each_line" などのすべての ruby IO メソッドを持っていると思いました。オブジェクト (IO クラスのメソッド) で "read" を呼び出すことはできますが、"each_line" を呼び出すことはできません。
コントローラーのメソッドを次のように作成します。
@csv_file = params[:csv_file]
「each_line」メソッドエラーをスローしない私のショービュー:
<% @csv_file.each_line do |line| %>
<%= line %>
<% end %>
でも使える
<%= @csv_file.read(100) %>
file_field_tag upload params[] が持っているメソッドが本当に混乱しています... each_line、gets が機能しません... 使用できるもののリストが見つからないようです。
編集 私はこれを回避しました:
@csv_file = params[:csv_file].read.to_s
次に、次のように繰り返します。
<% @sp_file.each_line do |line| %>
<%= line %>
<% end %>
EDIT 2 アップロードされているファイルには、コンマを含まない行の後にヘッダーが繰り返されています(尋ねないでください)...したがって、コンマのない行を見つけて.getsを呼び出します(レールに依存しないrbスクリプトで)。残念ながら、gets が呼び出せないプライベート メソッドであるというエラーが表示されます。これは私の最初の問題に戻ります。ファイルは read_lines や gets のような IO メソッドを持つ IO のサブクラスではありませんか?
@file_out = []
@file_in.each_line do |line|
case line
when /^[^,]+$/
@comp = line.to_s.strip
comp_header = @file_in.gets.strip.split('')
@file_out.push(@comp)
end
end