2009-05-06 89 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更新页面上的进度条。