【问题标题】:Provide feedback to view from controller提供反馈以从控制器查看
【发布时间】:2010-10-24 01:44:23
【问题描述】:

我在视图中使用多个文件字段来上传多个文件。我想通知用户上传进度。我尝试使用这样的东西

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

如果我删除对用户的反馈,它会正常工作。然而,当它进入时,它会因多次渲染错误而失败。我想知道是否有人知道这样做的任何方法。

【问题讨论】:

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


    【解决方案1】:

    您不能多次调用 render。仅当控制器方法将返回时才应使用渲染。

    要让它工作,你需要改变你做请求的方式,可能使用 ajax。然后每次上传都会更新页面上的东西,javascript会执行下一个“上传这个文件,然后更新”调用。

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

    【讨论】:

    • 谢谢,但我如何提出可以提供反馈的请求?有什么例子吗?谢谢
    【解决方案2】:

    我已经成功地使用了它:SWFUpload

    这是一个用于上传的 Flash 控件,您提供 html 前端,无论您使用文本还是百分比栏。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多