2012-07-09 2 views
3

Я работаю с Ruby, и мне нужно отправить постоянное сообщение о статусе обновления пользователю, когда в контроллере выполняется многолетняя задача.как отправить данные с контроллера на просмотр в ruby ​​

Метод вставляет несколько строк в базу данных. Я хочу показать пользователю следующее:

Выполняется загрузка, количество вставленных файлов.

В настоящее время я использую плагин jQuery LoadMask, но он показывает только простое сообщение, и я не знаю, как отправить количество вставленных строк, прерывая процесс.

+0

Возможно, вам придется представлять долговременные задачи в своей базе данных или как минимум хранить их в сеансе. Затем добавьте новый метод к контроллеру, который может вернуть сообщение с текущим статусом и опросить его через AJAX на вашей странице. Я сомневаюсь, что вы можете удобно «подтолкнуть» обновления к представлению от долговременного контроллера. – millimoose

ответ

1

Вам следует подумать о переносе этого долговременного процесса в фоновое задание, чтобы вы могли сразу дать обратную связь пользователю. После того, как фоновая работа была отправлена, в зависимости от механизма фоновой обработки вы сможете проверить статус заданий. Наверное, просто следить за статусом самостоятельно (в зависимости от вашей задачи). Используйте либо Redis, либо просто в вашей базе данных (для этого создайте отдельную таблицу). После того, как задание отправлено, вам нужно вернуть идентификатор задания, который вы можете использовать для опроса для обновлений.

Создайте новый контроллер (или действие), который вы можете использовать jQuery + Ajax и опрос для изменений. придавая ему job_id (который возвращенное предыдущее действие)

Пожалуйста, смотрите: Фей: http://faye.jcoglan.com/, http://railscasts.com/episodes/260-messaging-with-faye Голиафа: http://postrank-labs.github.com/goliath/

http://railscasts.com/episodes/229-polling-for-changes

задержанной Работа, Resque и т.д.

О, если вы просто ищете простой индикатор выполнения загрузки файла, см. Это Rails, upload progress bar

Вы также можете попробовать технику потоковой передачи, много информации об этом здесь: Ruby on Rails 3: Streaming data through Rails to client

+0

Я решил запустить фоновое задание для этой долгосрочной задачи, выполняемой задачи. Для этого я нашел очень полезным Railscast # 127 Rake in Background [ссылка] (http://railscasts.com/episodes/127-rake-in-background/) С уважением –

0

Это обычная необходимость в Rails и использование JQuery - это правильный подход.

Хотя специфика кода контроллера и вид зависят от того, как вы создали свое приложение, здесь хорошее место, чтобы начать:

Railscast # 136: JQuery: http://railscasts.com/episodes/136-jquery/

Одно вам нужно подумать о том, как периодически сообщать из вашего метода количество вставленных строк. У вас есть способ сделать это?

Сначала просмотрите railscast - это даст вам представление о том, как действовать как минимум на следующий шаг.

+0

В этом ответе отсутствует фактическое содержание. «Посмотрите на это руководство, касательное по отношению к вашему вопросу», на самом деле недостаточно. – millimoose

+0

У вас не хватает реального кода. Я не могу дать конкретный ответ, включая код, если вы этого не сделаете.Когда я впервые научился динамически обновлять AJAX веб-страницы, этот railscast помог мне начать работу, и я подумал, что это может вам помочь. –

+0

Это не мой вопрос. (Замечания OP отмечены голубым фоном за именем пользователя.) Если в вопросе не хватает деталей, лучше попросить разъяснения, а не просто размещать что-либо. Хотя материал может быть в конечном итоге полезен, он не затрагивает даже тех немногих особенностей, которые OP * * упомянул, и, следовательно, на самом деле не является ответом на вопрос. – millimoose

Смежные вопросы