1

从 ajax 我在我的控制器中调用我的导出操作

def export

    data_filtered = eval(params[:data_filtered][9..-2])
    CSV.open("data.csv", "wb") do |csv|
        csv << data_filtered.first.keys
        data_filtered.each do |hash|
            csv << hash.values
        end
     end
 end

目前,这确实在我的计算机上创建了一个名为 data.csv 的文件,但它没有显示任何实际这样做的证据。我希望文件由浏览器下载并显示在浏览器下载和我的下载文件夹中。

编辑:

def export
  data_filtered = eval(params[:data_filtered][9..-2])

  csv_file = CSV.generate({}) do |csv|
  csv << data_filtered.first.keys
  data_filtered.each do |hash|
    csv << hash.values
  end
end
send_data csv_file, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment; filename=tester1.csv"

结尾

4

2 回答 2

0

您需要设置标题以指示浏览器应该对生成的文件执行什么操作。

send_data file, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment;data=#{csv_file}.csv"

但是,必须先将其写入服务器,然后再下载。您可能会发现这个答案很有帮助:Ruby 1.9.2 export a CSV string without generate a file

于 2013-07-02T14:58:02.310 回答
0

好吧,您似乎没有从控制器方法发回任何响应,这就是浏览器中没有发生任何事情的原因。您只是在处理 CSV。

要向可下载实体发送响应,一种方法是使用send_datasend_file,具体取决于您拥有的数据格式(二进制与文件)。

两者本质上都是一样的——允许您指定数据、数据类型和您指定的可下载文件名。它可以作为响应返回,就像渲染调用一样。

希望有帮助!

于 2013-07-02T14:59:20.510 回答