2009-05-06 85 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

您無法多次調用渲染。渲染只能在控制器方法返回時使用。

爲了使這個工作,你需要改變你如何處理請求,可能使用ajax。然後每次上傳都會更新頁面上的內容,並且JavaScript會執行下一個「上傳此文件,然後更新」調用。

編輯:我不是一個前端人,所以我不能給你實際的工作代碼,但它會是這樣的。目前,您正在將幾個文件作爲參數發送到控制器。您需要對其進行更改,以便後端僅一次處理一個文件。這意味着更改前端以對後端執行單獨的請求。你不能只用html表單來做 - 你需要javascript。控制器將呈現rjs發送更新「已處理文件xyz」,客戶端代碼將觸發另一個上傳,直到所有文件都已上傳。

+0

謝謝,但我怎麼能提出要求,將提供反饋?任何例子?謝謝 – Anark 2009-05-06 00:22:14

1

我用這個大獲成功:SWFUpload

這是一個閃光控制,做上傳,您提供的HTML前端,無論你用文字或%吧。

1

如果您使用Workling作爲後臺工作人員,它可以存儲進度信息,然後您可以使用它來使用JavaScript更新頁面上的進度條。