使用ruby mechanize以表单形式上载多个文件

使用ruby mechanize以表单形式上载多个文件,ruby,forms,file-upload,mechanize-ruby,Ruby,Forms,File Upload,Mechanize Ruby,我可以使用以下Mechanize表单成功上载单个文件: def add_attachment(form, attachments) attachments.each_with_index do |attachment, i| form.file_uploads.first.file_name = attachment[:path] end end 其中,表单是一种机械化表单。但是,如果附件有多个元素,则最后一个元素将覆盖以前的元素。这显然是因为我使用的是first访问器,

我可以使用以下Mechanize表单成功上载单个文件:

def add_attachment(form, attachments)
   attachments.each_with_index do |attachment, i|
     form.file_uploads.first.file_name = attachment[:path]
   end
end
其中,
表单
是一种机械化表单。但是,如果附件有多个元素,则最后一个元素将覆盖以前的元素。这显然是因为我使用的是
first
访问器,它总是返回文件上传数组的相同元素

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

def add_attachment(form, attachments)
   attachments.each_with_index do |attachment, i|
     form.file_uploads[i].file_name = attachment[:path]
   end
end
如果我尝试创建一个新的文件上传对象,它也不起作用:

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不使用Javascipt。但是,事实证明,如果禁用Javascript,Redmine会很好地退化,我可以利用这一点

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

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
def添加附件(代理、表单、附件)
附件。每个带有索引do的附件i|
form.file\u uploads.first.file\u name=附件[:path]
如果i
我使用了以下内容

form.file\u上载[0]。file\u name=“要上载的第一个文件的路径”
form.file\u上载[1]。file\u name=“要上载的第二个文件的路径”
form.file\u上载[2]。file\u name=“要上载的第三个文件的路径”

而且工作得很好。希望这有帮助