Я реализую в Ruby on Rails, и я хочу сделать так, чтобы, на мой взгляд, я просматривал файл (CSV-файл). который я прочитал в и положить его в TempFile. Затем во втором представлении я показываю, например, первые 5 строк. И затем в моем третьем представлении я хочу показать первые строки снова. Мой контроллер:
class ProjectImporterController < ApplicationController
unloadable
def index
end
end
def match
file = params[:file]
@parsed_file=CSV::Reader.parse(file)
sample_count = 5
@original_filename = file.original_filename
tmpfile = Tempfile.new("redmine_user_importer")
if tmpfile
tmpfile.write(file.read)
tmpfile.close
tmpfilename = File.basename(tmpfile.path)
if !$tmpfiles
$tmpfiles = Hash.new
end
$tmpfiles[tmpfilename] = tmpfile
else
flash[:error] = "Cannot save import file."
return
end
session[:importer_tmpfile] = tmpfilename
i = 0
@samples = []
@parsed_file.each do |row|
if i != 0
@samples[i] = row
end
if i == 0
@headers = row
end
if i >= sample_count
break
end
i = i+1
end
end
end
def result
tmpfilename = session[:importer_tmpfile]
if tmpfilename
tmpfile = $tmpfiles[tmpfilename]
if tmpfile
flash[:error] = "Tempfile doesn't exist!"
return
end
@parsed_file=CSV::Reader.parse(tmpfile)
@samples = []
@parsed_file.each do |row|
if i != 0
@samples[i] = row
end
if i == 0
@headers = row
end
if i >= sample_count
break
end
i = i+1
end
end
end
Теперь мой код для первого просмотра просто:
<% form_tag({:action => 'match'}, {:multipart => true}) do %>
<table">
<tr>
<td>
<label for="dump_file">
Select a CSV File :
</label>
</td>
<td >
<%= file_field_tag 'file', :size => 60%></p>
</td>
</tr>
</table>
Второй и третий вид одинаковы:
<ul>
<% @samples.each do |a| %>
<li>
<%= a %>
</li>
<% end %>
</ul>
Это просто простой пример, но, с моей второй точки зрения, все работает, и система просто показывает первые результаты. Но в моем третьем представлении я получаю сообщение об ошибке: неопределенный метод `each 'для nil: NilClass. Так что @samples = ноль.
Кто-нибудь, кто знает, что я делаю не так?
Спасибо