我正在努力允许下载带有以下代码的 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
,因为您的问题中没有指定。