ruby-on-rails - 如何在 render_to_string 之后重定向到 html 页面?
问题描述
在我的控制器操作中PagesController#transfer
,我想下载一个 xml 文档,然后重新加载页面。
但是 xml 文档是生成的,render_to_string
所以当我在下载文件后尝试添加重定向时出现错误。
这样做的目的是在下载 XML 后获得一条 Flash 消息。所以重新加载页面似乎是一个不错的选择。
pages_controller
def transfer
...
multiple_export_to_sepa(objects, @errors)
end
private
def multiple_export_to_sepa(objects, errors)
sepa_filename = "virements_#{params[:type]}.xml"
if objects.present?
stream = render_to_string(template: "admin/pages/transfers_#{params[:type]}.xml", layout: false)
send_data(stream, type: 'text/xml', filename: sepa_filename , status: :created)
flash[:success] = "#{objects.length} objects has been generated."
redirect_to action: :transfer
else
redirect_to action: :transfer
end
end
解决方案
你试过使用flash.now
吗?
def multiple_export_to_sepa(objects, errors)
sepa_filename = "virements_#{params[:type]}.xml"
if objects.present?
stream = render_to_string(template: "admin/pages/transfers_#{params[:type]}.xml", layout: false)
send_data(stream, type: 'text/xml', filename: sepa_filename , status: :created)
flash.now[:success] = "#{objects.length} objects has been generated."
else
redirect_to action: :transfer
end
end
从文档(http://guides.rubyonrails.org/action_controller_overview.html#flash-now):
5.2.1 flash.now 默认情况下,将值添加到 flash 将使它们可用于下一个请求,但有时您可能希望在同一个请求中访问这些值。例如,如果创建操作未能保存资源并且您直接呈现新模板,则不会导致新请求,但您可能仍希望使用 flash 显示消息。为此,您可以像使用普通 flash 一样使用 flash.now:
class ClientsController < ApplicationController
def create
@client = Client.new(params[:client])
if @client.save
# ...
else
flash.now[:error] = "Could not save client"
render action: "new"
end
end
end
推荐阅读
- javascript - 如何使用正则表达式进行正确的输入验证?
- ruby-on-rails - Ruby Rspec should_not_receive 不工作
- mysql - 是否可以索引运行总计以加快窗口功能?
- php - 显示意外“。但我不知道为什么
- python - 不能改变轮廓的颜色
- python - python中完全连接的深度神经网络输入的重塑误差
- javascript - 如何使用 javascript 标记图像的一部分(图像操作)
- python - 将 .pb 从 Tensorflow 1.14 迁移到 2.0
- c++ - 如何确保我的 `ifstream` 文件对象指向的文件内容已更新?
- javascript - 获取特定的 td 值进行计算