ruby on rails如何使用javascript下载csv文件

时间:2017-06-17 00:19:05

标签: javascript jquery ruby-on-rails ajax reactjs

首先澄清一些。

我正在尝试本地开发环境中的所有内容。

在我的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方法。

所以我希望下载发生,但不确定两件事:

  1. 如何为此Users方法配置routes.rb 所以下载发生时没有抛出某种“失踪” 观点错误? (此时我不关心用户是否必须这样做 指向另一个视图或可以保持在同一页面上。)

  2. 应该在download_csv方法的主体中进行哪些操作 download_csv将启动下载, 对于位于window.location="/users/download_csv";的文件?

2 个答案:

答案 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