Чтение данных из недавно написанного TempFile не работает?IOerror закрыл поток в Ruby on Rails - PullRequest
3 голосов
/ 16 ноября 2011

Я реализую в Ruby on Rails, и у меня есть 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 

, а затем в моемв следующем режиме я хочу прочитать этот файл:неправильно?Заранее спасибо!

1 Ответ

3 голосов
/ 16 ноября 2011

AFAIK, Tempfile действует только до тех пор, пока вы его не закроете - тогда он больше не действителен. Если вы действительно хотите сохранить данные в файле, который остается после его закрытия, тогда вам нужно использовать настоящий файл.

Edit; Согласно нашей дискуссии, я не думаю, что вам нужен временный файл вообще. Вы просто отображаете части файла-данных, которые пользователь загрузил для вас. Для этого вам не нужен настоящий файловый объект (временный файл или другой).

Пользователь загружает «файл», и вы можете анализировать CSV (как вы это сделали), а затем вы можете просто обрабатывать его как массив строк. Сохраните его в @var, например "@csv_lines", и в ваших представлениях получите доступ к массиву @csv_lines, как вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...