我有一个Rails 4.2.8(Ruby 2.5.1(应用程序,使用Carrierwave和Remotipart通过Ajax(使用remote: true
(上传图像。在台式机或平板电脑上一切都很好,但当我尝试从移动设备上传图像时(无论是在生产中还是使用ngrok隧道传输本地版本(,远程表单实际上从未提交。
基本上,文件名会很快从"选择文件"输入按钮旁边消失,而是说"未选择文件",该按钮会立即被禁用(由于data: disable_with:
属性(,并永远保持这种状态。并且Post
请求从未运行/从未命中我的服务器。
到目前为止,我只在IOS设备上进行了测试,这就是它失败的地方。我还在我的Macbook上测试了Chrome开发工具中的移动布局,从那里可以很好地工作。否则,在IOS设备上,Chrome和Safari都会出现这种情况。
Post请求从未真正接触过我的服务器这一事实让我感到困惑https://github.com/rails/rails/issues/17947提交空文件表单时抛出错误,但没有错误。文件就这样消失了。当我把手机插入mac上的safari dev工具时,当我选择它时,文件字段会填充文件的值,但一旦我点击提交,字段就会被清除为""
,我在网络选项卡上看到的只是两个空白的about:blank
响应,一个是js类型,一个为other 类型
下面是我的形式本身。我的日志中没有显示Post
请求,所以我认为它不可能是来自控制器或其他地方的任何请求。最后,我尝试使用Chrome的移动检查工具Chrome:://inspect,据我所见,没有出现javascript错误。
如果有人对我下一步的调试之旅有任何想法,我将非常感谢您的帮助。
<%= simple_form_for current_user.profile, url: profiles_photo_step_path, method: :post, remote: true do |f| %>
<div class="carrierwave-button-div">
<%= f.input :image, as: :file, label: false %>
</div>
<%= f.submit "Submit", class: "btn btn-default", data: {disable_with: "Submitting..."} %>
<div class="primary-center-text" style="margin-top: 15px; padding: 10px 5px 5px 5px;">
<a href="#sign-up-complete" class="skip-step-link blue-link" id="skip-photo-link">Skip for now</a>
</div>
<% end %>
好吧,一旦我发现remote: true
是问题所在,我就觉得没有早点尝试,这很愚蠢,但我会发布我的解决方案,以防将来有人遇到这个非常具体的问题。
根据gem文档,我使用了gem 'remotipart', '~> 1.2'
。我升级到remotipart 1.4.4
,表单提交了文件。