首先澄清一些。
我正在尝试本地开发环境中的所有内容。
在我的UsersController
我有一个summary_csv
方法,用于构建csv文件并将其存储在/tmp/your-csv-file.csv
位置。
系统检查文件是否可以下载后,我有一个summary_csv.js.erb
文件运行一些javascript来帮助用户下载文件,具体来说,在summary_csv.js.erb
,我尝试{ {1}} window.location="/users/download_csv";
控制器中有一个download_csv
方法。
所以我希望下载发生,但不确定两件事:
如何为此Users
方法配置routes.rb
所以下载发生时没有抛出某种“失踪”
观点错误? (此时我不关心用户是否必须这样做
指向另一个视图或可以保持在同一页面上。)
应该在download_csv
方法的主体中进行哪些操作
download_csv
将启动下载,
对于位于window.location="/users/download_csv";
的文件?
答案 0 :(得分:1)
1)将get方法放在用户资源和集合中,如下所示
resources :users do
collection do
get 'download_csv'
end
end
2)你只需要send_file,将文件路径传递给它,因为它准备好了。
结果
def download_csv
send_file(
"/tmp/your-csv-file.csv",
filename: "your_custom_file_name.csv",
type: "text/csv"
)
end
答案 1 :(得分:0)
我最终找到了解决方案。感谢所有提供帮助的人
所以window.location
毕竟是最好用的方法
1)将其设置为controller/method
。
2)send_file
适当地在上述方法的主体中。
3)按正确的顺序设置正确的路线。
第3步对于让它发挥作用至关重要
必须准确配置controller/method
的路由,以免Rails对路由操作的位置感到困惑。
resources :users do
collection do
get 'download_csv' => 'specify which controller#which_method_name'
end
end