Ios Rails 6在手机上提示下载

Ios Rails 6在手机上提示下载,ios,ruby-on-rails,mobile,Ios,Ruby On Rails,Mobile,我有一个Rails 6应用程序,用户可以提交对模型的更改,并向站点管理员发送确认电子邮件。更改通过模式弹出窗口提交,一旦提交,弹出窗口将替换为另一个确认电子邮件已发送的弹出窗口 我遇到的问题是,当这在移动设备上完成时(我使用的是iPhone,不确定这是否发生在Android上),一旦提交更改,就会出现另一个弹出窗口,提示我下载一个大小为0的文件,其中包含正在更新的模型名称(在Safari和Chrome中都会发生)。这不会发生在网站的桌面版本或桌面上的移动模拟器上,因此我想不出如何诊断这个问题 以

我有一个Rails 6应用程序,用户可以提交对模型的更改,并向站点管理员发送确认电子邮件。更改通过模式弹出窗口提交,一旦提交,弹出窗口将替换为另一个确认电子邮件已发送的弹出窗口

我遇到的问题是,当这在移动设备上完成时(我使用的是iPhone,不确定这是否发生在Android上),一旦提交更改,就会出现另一个弹出窗口,提示我下载一个大小为0的文件,其中包含正在更新的模型名称(在Safari和Chrome中都会发生)。这不会发生在网站的桌面版本或桌面上的移动模拟器上,因此我想不出如何诊断这个问题

以下是在下载弹出窗口出现之前调用的代码:

<%= button_tag "Submit", type: 'submit',
                         id: 'modal-subimt',
                         class: 'btn btn-primary',
                         onClick: 'replaceModal()' %>
以下是在
create
中调用的
send\u confirmation\u email
函数:

def send_confirmation_email()
  UserMailer.model_confirmation(self).deliver_now
end
下面是由
发送确认电子邮件
调用的
模型确认
函数:

def model_confirmation(model)
  @model = model
  recipient = <admin email>

  mail to: recipient, subject: "Model Confirmation"
end

我不知道这到底是为什么解决了我的问题,所以如果有人能提供一些见解,我将不胜感激

问题与如何实例化的表单有关。当您将表单提交给
Model.new
对象时,表单\u将尝试使用用于处理它的创建方法推断控制器。请参阅中form_for如何工作的更多信息

也就是说,
create
方法可能是输出一些东西或什么也不输出,而不是重定向,这就是为什么在移动设备上下载,而在浏览器中,它只是一个空页面,因为它们可以处理它。如果方法上没有呈现,Rails将使用
204无内容或空文本页来回答。你必须检查一下你的方法

当您使用
remote:true
时,我将引用以下文档:

:remote-如果设置为true,将允许不引人注目的JavaScript驱动程序控制提交行为。默认情况下,此行为是ajax提交

因此,UJS没有重新加载页面,而是向“后端”页面发送一个
XMLHttpRequest
,这就是为什么没有重定向。提交的结果将在不重定向的情况下进行处理。但是根据请求的结果,页面的内容可能会出现。因此,你做出相应的回应是很重要的。在下面的链接中,您将找到正确的方法

请参阅这些问题中的更多内容:

此外,在导轨中:

这也是一个很好的参考:


可能是因为您在本地提交表单,所以使用了create方法,该方法不呈现任何内容,而您得到的是一个空文件,而不是一些html?可能浏览器不知道如何处理该空文件,因此返回下载。您是否尝试使用
form\u代替
form\u?我相信
form\u现在已经被弃用了。谢谢你提供的所有信息!这很有道理!
def model_confirmation(model)
  @model = model
  recipient = <admin email>

  mail to: recipient, subject: "Model Confirmation"
end
<%= form_for(Model.new, remote: true) do |f| %>
  ...
  <%= button_tag "Submit", type: 'submit',
                           id: 'modal-subimt',
                           class: 'btn btn-primary',
                           onClick: 'replaceModal()' %>
<% end %>