私は Ruby on Rails で実装しており、2 つのビューがあります。私の最初のビューでは、ファイルを読み込んで最初の行を表示し (これは正常に動作します)、次に 2 番目のビュー (コントローラーのメソッド内) で一時ファイルを書き込みます。全く同じで。そして、この一時ファイルの内容をもう一度表示したいと思います。しかし、これは機能しません。常にエラーが発生します:
IOError in Project importerController#result
closed stream
これは、私が行う最初のビューの背後にあるコントローラーの私のコードです:
tmpfile = Tempfile.new("tempfile")
if tmpfile
tmpfile.write(@samples)
tmpfile.close
tmpfilename = File.basename(tmpfile.path)
tmpfilenametest = tmpfilename
if !$tmpfiles
$tmpfiles = Hash.new
end
$tmpfiles[tmpfilename] = tmpfile
else
flash[:error] = "Cannot save import file."
return
end
@path = tmpfile.path
session[:importer_tmpfile] = tmpfilename
end
次に、次のビューで、このファイルを次のように読み取ります。
tmpfilename = session[:importer_tmpfile]
i = 0
sample_count = 5
if tmpfilename
tmpfile = $tmpfiles[tmpfilename]
if tmpfile == nil
flash[:error] = "Tijdelijk bestand bestaat niet!"
return
end
end
fields_map = params[:fields_map]
attrs_map = fields_map.invert
@parsed_tempfile=CSV::Reader.parse(tmpfile)
@sampletemp = []
@parsed_tempfile.each do |row|
@sampletemp[i] = row
i = i+1
end
このビューでは、それを表示したいだけです。
<ul>
<% @sampletemp.each do |x| %>
<li>
<%= x %>
</li>
<% end %>
</ul>
誰かが私が間違っていることを見ていますか? 前もって感謝します!