我在一个 View 中使用多个文件字段来上传多个文件。我想通知用户上传进度。我试过用这样的东西
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
如果我删除对用户的反馈,它会正常工作。但是它在进入时失败并出现多重渲染错误。我想知道是否有人知道这样做的任何方法。
最佳答案
您不能多次调用渲染。仅当 Controller 方法将返回时才应使用渲染器。
要使其正常工作,您需要更改发出请求的方式,可能使用 ajax。然后每次上传都会在页面上更新一些东西,javascript 会执行下一个“上传这个文件,然后更新”调用。
编辑:我不是前端人员,所以我不能为此提供实际的工作代码,但应该是这样的。目前,您正在将几个文件作为参数发送到 Controller 中。您需要更改此设置,以便后端一次只处理一个文件。这意味着更改前端以向后端发出单独的请求。您不能仅使用 html 表单来执行此操作——您需要 javascript。 Controller 将呈现一个 rjs 以发回更新“已处理文件 xyz”,客户端代码将触发另一次上传,直到所有文件都已上传。
关于javascript - 提供反馈以从 Controller 查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/827501/