2009-05-06 2 views
1

Я использую несколько полей файла для просмотра нескольких файлов. Я хотел бы сообщить пользователю о загрузке прогресса. Я попытался использовать что-то вроде этогоОбеспечить обратную связь от контроллера

def create 
    params[:upload_data].each do |file| 
    unless (file =="" or file== nil) 
    @photo = Photo.create({:approved => false, :user_id => @current_user.id})  
     @result = "Uploading #{file.original_filename}" 
      render :update do |page| 
      page.insert_html(:bottom, 'progress', :partial => 'partials/result') 
      end 
     #... perform upload 
end 

Он отлично работает, если я удаляю обратную связь с пользователем. Однако он терпит неудачу с множественной ошибкой рендеринга, когда он находится. Мне было интересно, знает ли кто-нибудь об этом.

ответ

2

Вы не можете вызвать рендер несколько раз. Render следует использовать только при возврате метода контроллера.

Чтобы это сработало, вам нужно будет изменить способ выполнения запросов, возможно, используя ajax. Затем каждая загрузка будет обновлять что-то на странице, а javascript выполнит следующий вызов «загрузить этот файл, а затем обновить».

Редактировать: Я не сторонник, поэтому я не могу дать вам фактический рабочий код для этого, но это будет что-то вроде этого. В настоящее время вы отправляете несколько файлов в качестве параметров в контроллер. Вам нужно изменить это так, чтобы бэкэнд обрабатывал только один файл за раз. Это означает изменение интерфейса для выполнения отдельных запросов на бэкэнд. Вы не можете сделать это только с помощью html-формы - вам понадобится javascript. Контроллер отобразит rjs для отправки обновленного «обработанного файла xyz», код клиентской стороны отключит другую загрузку до тех пор, пока все файлы не будут загружены.

+0

Спасибо, но как я могу сделать запрос, который обеспечит обратную связь? Любые примеры? благодаря – Anark

1

Я использовал это с большим успехом: SWFUpload

Это управление вспышкой, которая делает загрузку, вы обеспечиваете HTML передний конец, используете ли вы текст или% бар.

1

Если вы используете Workling в качестве фонового работника, он может сохранять информацию о ходе работы, которую затем можно использовать для обновления панели progess на вашей странице с помощью javascript.

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