обмениваться данными между действиями контроллера в ruby ​​на рельсах - PullRequest
2 голосов
/ 19 мая 2011

В настоящее время я разрабатываю приложение, которое должно анализировать некоторые (большой файл) данные CSV.Я должен выполнить несколько шагов, чтобы манипулировать и отображать данные в объекты ActiveRecord.Это должно быть сделано в несколько шагов, и я должен отобразить результаты в представлении.

Итак, я начинаю с импорта # index.Здесь я разрешаю пользователям загружать CSV-файл, ничего особенного

Затем я иду через импорт # создать, чтобы создать объект импорта.

Затем я на шаге 2 импорта # шоу.Здесь я отображаю результаты.Поэтому в import # show я проанализировал все данные csv и удалил ненужные мне строки.(Это один большой массив со структурами в нем.)

Затем я хочу перейти к шагу 3 для дальнейшей обработки тех же данных.Но как в мире я могу получить большой массив из шага 2 в шаге 3 без сеанса (из-за структур, я не могу вставить его в сеанс, он дает мне следующую ошибку: TypeError (can't dump anonymous class #<Class:0x105477128>):

И когда я ставлюв сеансе с .inspect возникает эта ошибка: ActionDispatch::Cookies::CookieOverflow. Но тогда это всего одна большая строка, и я хочу сохранить функциональность ruby ​​(например, это 1 большой массив с объектами struct в нем ...)

Итак, чтобы обернуть все это

Шаг 1, загрузка файла, Шаг 2. Анализ данных и манипулирование ими. Шаг 3 Использование данных из шага 2 (без сеанса ..) Шаг 4 Данные пользователя из шага 3

Какв мире могу я заставить это работать ... Я не могу понять это: <</p>

1 Ответ

3 голосов
/ 19 мая 2011

Вы должны иметь в виду разные принципы:

  • Контроллеры не предназначены для работы с данными, модели или классы делают

  • парсинг большого файла не должен производиться внутри контроллера, а должен помещаться в некоторую очередь (отложенное задание обрабатывает это правильно, посмотрите, как это работает здесь ). Просто представьте, что ваш пользователь бесконечно ждет, когда что-то случится ...

Подводя итог:

  • Шаг 1: загрузить файл => хорошо, я думаю, вы сохранили его, отлично

  • Step2 анализирует данные и манипулирует ими => должен запускаться на шаге 1 и запускаться в очереди отложенных заданий

  • Step3 Использовать данные из шага 2 (без сеанса ..) => все данные, обработанные способом, который я предлагаю, могут быть сохранены в кеше, базе данных или там, где вы найдете это полезным

  • Step4 Пользовательские данные из step3 => вы хотите отобразить результат вашей обработки, я предлагаю вам реализовать AJAX-запрос, проверяющий, была ли работа выполнена или нет (для этого я настоятельно рекомендую вам сохранить информацию в кеше, чтобы не запрашивать вашу базу данных слишком часто).

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