如何在用户计算机上创建文件,而不是在服务器中创建,然后使用rails下载



我正在努力允许下载带有以下代码的 excel 文件:

login     = Etc.getlogin
@dataFile = "C:/rails/#{login}data.csv"
csv1=CSV.open(@dataFile, 'w') do |csv|
$data.each do |eachrow|
csv << [eachrow.name+"@gmail.com"]
end
end
send_file(@dataFile, :filename => "#{login}data", :type =>  "application/csv")

使用上面的代码,我能够创建一个文件并写入数据。

取而代之的是,我如何在csv中写入数据并将其下载到用户机器中,而不是保存在本地/服务器中。

您可以做的是使用 CSV 库生成一个字符串,使用CSV::generate而不是CSV::open

控制器:

class DataController < ApplicationController
def download
respond_to do |format|
format.csv { send_csv_download }
end
end
private
def send_csv_download
string = CSV.generate do |csv|
@data.each { |row| csv << ["#{row.name}@gmail.com"] }
end
send_data string, filename: 'foo.csv', type: :csv
end
end

config/routes.rb:

get '/download', to: 'data#download'

视图:

<%= link_to 'Download CSV', download_path(format: :csv) %>

注意:显然,我不知道您从哪里获得@data,因为您的问题中没有指定。

最新更新