Ruby on rails Rails如何使用send_数据导出数据,然后将_重定向到新页面?

Ruby on rails Rails如何使用send_数据导出数据,然后将_重定向到新页面?,ruby-on-rails,Ruby On Rails,我有一个rails应用程序,允许用户下载生成的CSV文件。下载文件后,我想将用户重定向到新的URL或操作。发送数据后重定向有什么诀窍吗 我想做这样的事情(这不起作用): send_data是一个渲染,因此在控制器方法中不能在渲染后执行任何操作 解决方法都涉及Javascript。这里有一种方法,我在一起时从未真正喜欢过: 用户点击提交 弹出一个小窗口,连接控制器下载文件 主窗口重定向到下一页 最后,我把文件生成变成了一项后台工作。然后用户转到一个作业页面(不需要后续重定向)获取文件。在我的情

我有一个rails应用程序,允许用户下载生成的CSV文件。下载文件后,我想将用户重定向到新的URL或操作。发送数据后重定向有什么诀窍吗

我想做这样的事情(这不起作用):


send_data
是一个渲染,因此在控制器方法中不能在渲染后执行任何操作

解决方法都涉及Javascript。这里有一种方法,我在一起时从未真正喜欢过:

  • 用户点击提交
  • 弹出一个小窗口,连接控制器下载文件
  • 主窗口重定向到下一页

最后,我把文件生成变成了一项后台工作。然后用户转到一个作业页面(不需要后续重定向)获取文件。

在我的情况下,我在第1页有一个下载链接,成功下载后,我只想将它们重定向到第1页(与有下载链接的页面相同)。如果你有一个像我一样的案例,请做下面的一个

只需在下载按钮/链接中添加
target=“\u blank”
。这仅适用于
send_data
render方法。如果使用
send_file
,则必须在js中处理此问题


它重定向到单独的页面并弹出下载文件保存选项。保存后,它会关闭新选项卡,并将它们带到您单击下载按钮的页面。

当您运行作为示例的代码时会发生什么?无-无下载,无重定向。似乎rails将发送_数据视为“渲染”。如果真是这样的话,我认为这会导致一个例外。这项技术工作得很好,直到一个使用IE6和非常严格的浏览器安全设置的用户出现,它停止工作。我最终使用了一个作为下载操作的目标,这似乎在我所有测试过的环境中都有效。我努力实现发送+重定向,失败了很多次,当我读到这个答案时,才有了最终的facepalm时刻。有时候最简单的解决方案就是最好的!
send_data(output,:type => content_type,:filename => "myfile.csv")
redirect_to :controller => 'my_controller', :action => 'download_done'