提供反馈以从控制器查看

时间:2009-05-06 00:12:54

标签: javascript ruby-on-rails ruby ajax upload

我在视图中使用多个文件字段来上传多个文件。我想告知用户有关上传进度的信息。我试过用这样的东西

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 个答案:

答案 0 :(得分:2)

您无法多次调用渲染。只有在控制器方法返回时才应使用渲染。

要使其发挥作用,您需要更改执行操作的方式,可能使用ajax。然后每次上传都会更新页面上的内容,javascript将执行下一个“上传此文件,然后更新”调用。

编辑:我不是前端人员,所以我不能为你提供实际工作代码,但它会是这样的。目前,您正在将多个文件作为参数发送到控制器中。您需要更改此设置,以便后端一次只处理一个文件。这意味着更改前端以对后端执行单独的请求。你不能只用一个html表单来做到这一点 - 你需要javascript。控制器将呈现一个rjs以发回更新“已处理文件xyz”,客户端代码将触发另一个上载,直到所有文件都已上传。

答案 1 :(得分:1)

我已经成功使用了这个:SWFUpload

这是一个闪存控件,可以上传,你提供html前端,无论你是使用文本还是%bar。

答案 2 :(得分:1)

如果您使用Workling作为后台工作程序,它可以存储进度信息,然后您可以使用javascript更新页面上的进度条。