Обеспечить обратную связь для просмотра с контроллера - PullRequest
1 голос
/ 06 мая 2009

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

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

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

Ответы [ 3 ]

2 голосов
/ 06 мая 2009

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

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

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

1 голос
/ 06 мая 2009

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

1 голос
/ 06 мая 2009

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

Это элемент управления флэш-памятью, который выполняет загрузку, вы предоставляете html-интерфейс независимо от того, используете ли вы текст или панель%.

...