上传多个文件的形式与ruby机械化



我可以使用Mechanize表单成功地上传一个文件,如下所示:

def add_attachment(form, attachments)
   attachments.each_with_index do |attachment, i|
     form.file_uploads.first.file_name = attachment[:path]
   end
end

,其中form为机械化形式。但是,如果附件包含多个元素,则最后一个元素将覆盖前面的元素。这显然是因为我使用first访问器,它总是返回file_uploads数组的相同元素。

为了解决这个问题,我尝试了这个,结果出现了一个错误,因为这个数组中只有一个元素。

def add_attachment(form, attachments)
   attachments.each_with_index do |attachment, i|
     form.file_uploads[i].file_name = attachment[:path]
   end
end

如果我尝试创建一个新的file_upload对象,它也不工作:

def add_attachment(form, attachments)
   attachments.each_with_index do |attachment, i|
     form.file_uploads[i] ||=  Mechanize::Form::FileUpload.new(form, attachment[:path])
     form.file_uploads[i].file_name = attachment[:path]
   end
end

你知道如何使用Mechanize上传多个文件吗?

所以,我解决了这个问题,但并不完全像我想象的那样。

我试图上传文件的网站是一个Redmine项目。Redmine使用JQueryUI作为文件上传器,这让我很困惑,因为Mechanize不使用javascript。但是,事实证明,如果Javascript被禁用,Redmine会很好地降级,我可以利用这一点。

当Javascript被禁用时,每次只能在编辑表单中上传一个文件,但是为刚刚创建的问题转到"edit"url可以上传第二个文件。我的解决方案是简单地附加一个文件,上传表单,然后单击结果页面上的"Update"链接,这将显示一个带有新表单和另一个上传字段的页面,然后我可以使用它来附加下一个文件。除了最后一个附件,我对所有附件都这样做了,这样表单处理就可以完成,然后最后一次上传。下面是相关的代码:

def add_attachment(agent,form, attachments)
  attachments.each_with_index do |attachment, i|
    form.file_uploads.first.file_name = attachment[:path]
    if i < attachments.length - 1
      submit_form(agent, form)
      agent.page.links_with(text: 'Update').first.click
      form = get_form(agent)
    end
  end
  form
end

我使用了以下

form.file_uploads[0]。File_name = "要上传的第一个文件的路径"
form.file_uploads[1]。File_name = "要上传的第二个文件的路径"
form.file_uploads[2]。File_name ="第三个要上传文件的路径"。

并且工作正常。

相关内容

  • 没有找到相关文章

最新更新