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