ruby-on-rails - Rails 6:响应负载返回 CSV 但未下载
问题描述
我有一个视图,允许用户选择要在 CSV 文件中导出的一组记录。
在用户选择一组记录并提交包含信息的表单后,CSV 会正确生成并返回,但不会询问用户将文件保存在哪里,什么也没有发生。在浏览器上检查请求后,我发现数据以原始 CSV 形式存在于响应负载中。如何让浏览器显示保存对话框?
该视图有一个包含记录列表的表单,并且可以选择(使用复选框)导出每条记录。
<%= form_with url: export_to_csv_admin_properties_url, multipart: true do |form| %>
<table class="table is-striped">
<thead>
<tr>
<th><%= sortable "id" %></th>
<th><%= sortable "city" %></th>
<th>To export</th>
</tr>
</thead>
<tbody>
<% @properties.each do |property| %>
<tr>
<td><%= property.id %></td>
<td> <%= property.city %> </td>
<td><%= check_box("export", property.id) %></td>
</tr>
<% end %>
</tbody>
</table>
<%= form.submit "Export" %>
<% end %>
控制器正确接收数据并调用负责构建 CSV 字符串的类:
def export_to_csv
ids_to_export = params[:export].select { |_key, value| value == '1' }.keys
properties = Property.find(ids_to_export)
csv_data = CsvService.export_properties(properties)
send_data csv_data, filename: "exported_properties.csv", type: 'text/csv'
end
解决方案
添加local: true
到from_with
视图中的方法解决了这个问题。
<%= form_with url: export_to_csv_admin_properties_url, local: true do |form| %>
推荐阅读
- java - 如何使用 PostgreSQL 设置 JNDI 数据源?
- c - Uint32_t 的可变字节数
- android - 如何在没有系统确认对话框的情况下删除 Android 11 (API 30) 上的文件?
- oracle - Oracle Apex Interactive Grid Master 多选到详细信息
- sql - SQL - 需要基于两个整数列的附加唯一标识符列的解决方案
- flutter - Flutter 具有动态宽度的水平网格视图
- azure - Azure:是否应将 CloudStorageAccount 在 Web 服务器上设为静态?
- ios - 您如何在 Swift 5 中使用 AV 音频播放器在特定时间间隔内快进或快退音频(如歌曲)?
- typescript - 在 Angular 8 中查找未使用的变量
- node.js - Mongoose 在更新模型时设置空数组