gpt4 book ai didi

ios - Rails 6提示在手机上下载

转载 作者:行者123 更新时间:2023-12-01 16:12:21 25 4
gpt4 key购买 nike

我有一个 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:之前我正在创建模型并留在页面上(确认电子邮件已发送)。我将我的 Controller 更改为 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 %>

我不确定为什么这能解决我的问题,所以如果有人能提供一些见解,我将不胜感激!

最佳答案

问题与您如何实例化 form_for 有关。当您将表单提交给 Model.new 对象时,form_for 会尝试使用 create 方法推断 Controller 来处理它。在 https://apidock.com/rails/ActionView/Helpers/FormHelper/form_for 中查看更多 form_for 的工作原理

话虽如此,create 方法可能会输出一些东西或什么都不输出,而不是重定向,这就是为什么您在移动设备上下载,而在浏览器中它只是一个空页面,因为它们可以处理它.如果该方法没有渲染,Rails 将返回一个 204 No Content 或一个空的文本页面。你必须检查你的方法。

当你使用remote: true时,我会引用文档:

:remote - If set to true, will allow the Unobtrusive JavaScript drivers to control the submit behavior. By default this behavior is an ajax submit.

因此,UJS 不会重新加载页面,而是将 XMLHttpRequest 发送到“后端”页面,这就是您没有获得重定向的原因。提交的结果在没有重定向的情况下被处理。但是根据请求的结果,页面的内容就可以来了。因此,您做出相应的回应很重要。在下面的链接中,您将找到正确的方法。

在这些问题中查看更多:

此外,在 Rails 指南中:

这也是一个很好的引用:

关于ios - Rails 6提示在手机上下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61600438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com