【发布时间】:2020-05-04 19:52:19
【问题描述】:
我有一个 Rails 6 应用程序,用户可以在其中提交对模型的更改,确认电子邮件将发送给站点管理员。更改通过模式弹出窗口提交,一旦提交,弹出窗口将替换为另一个确认电子邮件已发送的窗口。
我遇到的问题是在移动设备上完成此操作时(我使用的是 iPhone,不确定这是否发生在 Android 上),一旦提交更改,就会出现另一个弹出窗口,提示我下载大小为0 更新模型的名称(它发生在 Safari 和 Chrome 中)。这不会发生在网站的桌面版本或桌面上的移动模拟器中,所以我想不出如何诊断这个问题。
这是在下载弹出窗口出现之前调用的代码:
<%= button_tag "Submit", type: 'submit',
id: 'modal-subimt',
class: 'btn btn-primary',
onClick: 'replaceModal()' %>
这是提交表单时调用的create 函数:
def create
... # Setting the parameters for the model being changed
if @model.save
@model.send_confirmation_email()
else
# Irrelevant because the email gets sent
end
end
这是create中调用的send_confirmation_email函数:
def send_confirmation_email()
UserMailer.model_confirmation(self).deliver_now
end
这里是send_confirmation_email调用的model_confirmation函数:
def model_confirmation(model)
@model = model
recipient = <admin email>
mail to: recipient, subject: "Model Confirmation"
end
在这段代码中,我无法看到可能会提示我下载文件的位置,但可惜它正在发生。任何有关如何正确诊断或解决此问题的帮助将不胜感激。谢谢!
编辑: 我更改了我的代码,以便在不发送确认电子邮件的情况下更新模型此外,模式不再替换为验证电子邮件已发送的新模式,我仍然遇到同样的问题。这让我相信问题出在模型的创建上。
编辑 2:
以前我正在创建模型并留在页面上(确认电子邮件已发送)。我将控制器更改为redirect_to request.referer,以便在更改完成后重新加载页面,完成后不再提示我下载空文件。不幸的是,我希望它工作的方式,重新加载页面并不是最佳的。在更新模型而不重新加载页面时,是否有任何原因会提示我下载?
解决方案:
我可以通过将remote: true 添加到form_for 行来解决这个问题,如下所示:
<%= form_for(Model.new, remote: true) do |f| %>
...
<%= button_tag "Submit", type: 'submit',
id: 'modal-subimt',
class: 'btn btn-primary',
onClick: 'replaceModal()' %>
<% end %>
我不确定为什么这完全解决了我的问题,所以如果有人能提供一些见解,将不胜感激!
【问题讨论】:
-
也许是因为你在本地提交表单,所以你进入了 create 方法,它什么都不呈现,你得到一个空文件而不是一些 html?也许浏览器不知道如何处理那个空文件,所以它返回一个下载。
-
你试过
form_with而不是form_for吗?我相信form_for现在已被弃用。
标签: ios ruby-on-rails mobile