2017-06-17 81 views
2

首先进行一些说明。ruby​​ on rails如何使用javascript下载csv文件

我试图在本地开发环境的一切。

在我的UsersController我有一个summary_csv方法,建立一个csv文件并将其存储在/tmp/your-csv-file.csv的位置。

一旦系统检查该文件可供下载,我有一个summary_csv.js.erb文件运行一些JavaScript来帮助用户下载的文件,特别是,在summary_csv.js.erb,我尝试做window.location="https://stackoverflow.com/users/download_csv";并且在一个download_csv方法Users控制器。

所以我想下载发生,但不知道两件事:

  1. 我应该如何为这个download_csv方法 配置routes.rb从而使下载发生不引发某种“缺失 意见'错误? (在这一点上,我不在乎用户是否必须 指向另一个视图或可以保持在同一页面上)。

  2. 应该进入download_csv方法的主体是什么,这样 window.location="https://stackoverflow.com/users/download_csv";会启动下载, 为位于/tmp/your-csv-file.csv文件?

回答

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 
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 
+0

我想这并没有任何反应...'development.log'说“发送的文件”,但没有任何反应...我本地开发服务器上做这个..也许这是为什么呢? – namesake22

+0

由于某些原因,它触发我的用户'show'方法,并说undefined id = download_csv ... – namesake22

+1

@ namesake22你的show方法被调用,因为你可能没有声明任何路由,我试图告诉你声明它你为别人做的事,而不是不宣布嘿嘿。我会编辑我的答案 –

相关问题