【问题标题】:ruby on rails how to download csv file using javascriptruby on rails 如何使用 javascript 下载 csv 文件
【发布时间】:2017-06-17 00:19:04
【问题描述】:

先做一些澄清。

我正在本地开发环境中尝试一切。

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

一旦系统检查到文件可以下载,我就有一个summary_csv.js.erb 文件,它运行一些javascript 来帮助用户下载文件,具体来说,在summary_csv.js.erb,我尝试做window.location="/users/download_csv"; 和那里是Users 控制器中的download_csv 方法。

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

  1. 我应该如何为这个download_csv方法配置routes.rb 这样下载就不会抛出某种“缺失” 意见错误? (此时我不在乎用户是否必须 定向到另一个视图或可以停留在同一页面上)。

  2. download_csv 方法的主体中应该包含什么,以便 window.location="/users/download_csv"; 将启动下载, 对于位于/tmp/your-csv-file.csv的文件?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 我试过了,但什么也没发生...development.log 说“已发送文件 ”但没有任何反应...我在本地开发服务器上执行此操作...也许这就是原因?跨度>
    • 由于某些原因,它触发了我的 Users show 方法并说 undefined id=download_csv...
    • @namesake22 你的 show 方法被调用是因为你可能没有声明任何路由,我试图告诉你以你对其他人的方式声明它,而不是不声明呵呵。我将编辑我的答案
    • @namesake22 只是 javascript 必须在没有 ajax 的情况下浏览 url 的一种方式。 The window.location object can be used to get the current page address (URL) and to redirect the browser to a new page。不喜欢嘿嘿。如果你愿意,你可以直接调用你的下载而不需要那个 window.location
    • 不,这不是真的。但是在执行 Ajax 调用以获取文件时,您还必须在客户端中用 JavaScript 编写接收函数
    【解决方案2】:

    我最终找到了解决方案。感谢所有提供帮助的人

    所以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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2016-12-15
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多